这可能是一个非常基本的问题,但我只想确保自己能够做到这一点。当我释放类实例“newPlanet_001”处理的顺序是什么时,我正确地假设如果在释放之前对象的保留计数为1,则首先调用实例dealloc方法(释放实例变量“ planetName“)在继续释放整个类实例之前?
(即)
// CLASS
@interface PlanetClass : NSObject {
NSString *planetName;
}
- (NSString *)planetName;
- (void)setPlanetName:(NSString *)newPlanetName;
@end
// MAIN
int main (int argc, const char *argv[]) {
PlanetClass *newPlanet_001;
newPlanet_001 = [[PlanetClass alloc] init];
[newPlanet release];
}
// DEALLOC
- (void)dealloc {
[planetName release];
[super dealloc];
}
@end
欢呼 - 加里 -
答案 0 :(得分:3)
-[NSObject release]
调用-dealloc
。这允许对象在调用[super dealloc]
之前清除它拥有的任何对象以进行实际的释放。
如果正确实现,对象将在调用super之前释放它拥有的任何对象(如果它们的保留计数也为零,则它们将被释放)。
如果对象在其上调用alloc
,copy
或retain
,则该对象拥有另一个对象。
答案 1 :(得分:0)
你的假设是正确的。 planetName对象在newPlanet_001实例之前释放。