我是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