下面來一起學習一下點語法的內存管理
(一):賦值
示例代碼:
@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];
}
}
(二):讀寫性
示例代碼:
-(void)setPerson:(Person *)person{
@synchronized(self){
_person=person;
}
} //設置方法
(三):原子性
示例代碼:
-(Person *)person{
@synchronized(self){
return _person;
}
}
區別:
assign:直接賦值,只是一個別名而已
retain:保留該對象,兩個對象指向了同一個位置
copy:開辟了一個新的內存空間,分別指向了不同的內存位置,引用計數分別為1,
不過與之前的對象沒有任何關系(特殊情況除外)