下面來一起學習一下點語法的內存管理

(一):賦值

  •           assign:直接賦值,默認
  •           retain:保留對象
  •           copy:拷貝對象

 示例代碼:

 @property (assign)Person *person;

 @synthesize person=_person;

 當使用retain的時候為:

 -(void)setPerson:(Person *)person{

    if(_person!=person){         [_person release];         _person=[person retain];     } }

 當使用copy的時候(必須對象要實現copy協議)

-(void)setPerson:(Person *)person{     if(_person!=person){         [_person release];         _person=[person copy];     } }
 (二):讀寫性

  •          readwrite:生成getter,setter方法,默認
  •          readonly:生成那個getter方法

 示例代碼:

 -(void)setPerson:(Person *)person{

    @synchronized(self){         _person=person;     } } //設置方法

  (三):原子性

  •         atomic:多線程環境下 ,存在線程保護,默認
  •        noatomic:多線程環境下,不存在線程保護

 示例代碼:

 -(Person *)person{

    @synchronized(self){         return _person;     }     }

  

區別:

assign:直接賦值,只是一個別名而已

retain:保留該對象,兩個對象指向了同一個位置

copy:開辟了一個新的內存空間,分別指向了不同的內存位置,引用計數分別為1,

        不過與之前的對象沒有任何關系(特殊情況除外)