看過好幾次這種描述:在初始化方法或者是 dealloc 中最好不要使用屬性,因為無法確定 self 到底是不是確實調用的是你想要的實例,這個是為什么呢?
在哪看的?那都是陳年往事了,ARC 里沒有限制,隨便用。
以前手動管理內存的年代,因為調用屬性會涉及到引用計數器的加減,而 self = [super ...]
初始化的對象不一定是當前類的對象,可能是“變體”或私有類(objc里的class有 class
和 metaclass
的區(qū)別),所以在你不知道屬性 setter 方法里到底是怎么加減引用計數器的情況下,你就只針對 ivar
進行 retain 和 release 就行了。
- (id)initWithString:(NSString *)str
{
self = [super init];
if (self) {
_foo = [str copy];
}
return self;
}
- (void)dealloc
{
[_foo release];
[super dealloc];
}
retain(copy,new) 和 release 成對出現
因為有分類(Category)以及setter以及getter以及KVO等需要注意
最主要的是因為分類.語法可以調用分類的屬性及方法,但是_就不行了,需要注意