下面來一起學習一下點語法的內存管理
(一):賦值
- 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,
不過與之前的對象沒有任何關系(特殊情況除外)