【发布时间】:2009-09-10 19:06:38
【问题描述】:
我试图了解下面的 getter 中发生了什么,这是我目前所了解的:
(1) getter 返回一个指向 NSString 对象的指针。 (2) NSString 对象被保留,可能是因为我们刚刚给出了一个指向它的指针。 (3) 自动释放?什么时候激活,当 PlanetClass 实例被释放(释放)?
// CLASS
@interface PlanetClass : NSObject {
NSString *planetName;
}
- (NSString *)planetName;
- (void)setPlanetName:(NSString *)value;
@end
// GETTER
- (NSString *)planetName{
return[[planetName retain] autorelease];
}
编辑:我认为我对实际保留和稍后发布的原因感到更加困惑。我的理解是,getter 只是返回了一个指向 nil 或已经存在的对象(即由 setter 设置)的指针释放,这只是一个故障保险,以防我后来忘记释放 NSString 对象?
实例变量planetName也在我的dealloc方法中释放(见下文)autorelease似乎也在做同样的事情,只是稍后池耗尽时?
- (void)dealloc {
[planetName release];
[super dealloc];
}
干杯-加里-
【问题讨论】:
标签: objective-c memory setter