我是NSURLConnection的子類,並使用MGTwitterEngine作爲基礎來幫助我開始。這可能是無關緊要的。然而,我在他們的代碼中發現他們不使用他們的ivars @property
或@synthesize
。他們已經用看起來像這樣的訪問器方法包裝了ivars:Objective-C(iPhone)ivars和內存管理
- (NSString *)identifier {
return [[_identifier retain] autorelease];
}
我的問題是兩部分。首先retain
跟autorelease
有什麼關係?在我看來,它會取消本身,或更糟糕的是泄漏。
其次,如果我改變頭文件有:
@property (nonatomic, retain, readonly) NSString* _identifier;
並用@synthesize indentifier = _identifier
,就不會這樣做同樣的事情的訪問方法,而不必寫呢?
也許這只是兩種不同的方式來做同樣的事情。但我想確保我有正確的理解。謝謝。
這是有道理的。感謝您的詳細解釋。一個方面的問題,如果我的一個ivars是對'delegate'的引用,我不希望這樣做,而是傾向於使用具有'assign'屬性的'@ property'。也就是說,我不應該在引用類對象時調用'retain' /'autorelease',對吧?只有我的課程擁有並允許訪問者。 – 2010-10-24 17:46:57
@Jason:對,代表不應該由內存管理,因此他們只需執行'return delegate'。如果屬性是'copy',那麼在mutator方法中執行'ivar = [arg copy]',在getter方法中執行'return [[ivar retain] autorelease]'。 – PeyloW 2010-10-25 13:04:02