OC使用了一種叫做引用計數的機制來管理對象,如果對一個對象使用了alloc、[Mutable]copy,retain,那么你必須使用相應的realease或者autorelease。也可以理解為自己生成的對象,自己持有。非自己生成的對象,自己也能持有。不在需要自己持有的對象時釋放。非自己持有的對象無法釋放。生成并持有對象,持有對象,釋放對象,廢棄對象。readwrite(默認):可讀可寫,表示既有getter方法,也有setter方法。readonly:表示只有getter方法,沒有setter方法。nonatomic:不考慮線程安全。atomic(默認):線程操作安全。strong(默認):ARC下和MRC下retain一樣,weak(ARC下):和(MRC下)assign類似,區別是當weak指向的內存釋放掉后自動置為nil,防止野指針。
unsafe_unretained聲明一個若引用,但不會自動置為nil,可能會出現野指針。
線程安全下的setter和getter方法:
-(NSString *)value{
@synchronized(self){
return [[_value retain] autorelease];
}
}
-(void)setValue:(NSString *)aValue{
@synchronized(self){
[aValue retain];
[_value release];
_value = aValue;
}
}