班级实例下达订单?

时间:2009-09-13 20:24:49

标签: objective-c memory

这可能是一个非常基本的问题,但我只想确保自己能够做到这一点。当我释放类实例“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

欢呼 - 加里 -

2 个答案:

答案 0 :(得分:3)

如果保留计数为零,则

-[NSObject release]调用-dealloc。这允许对象在调用[super dealloc]之前清除它拥有的任何对象以进行实际的释放。

如果正确实现,对象将在调用super之前释放它拥有的任何对象(如果它们的保留计数也为零,则它们将被释放)。

如果对象在其上调用alloccopyretain,则该对象拥有另一个对象。

答案 1 :(得分:0)

你的假设是正确的。 planetName对象在newPlanet_001实例之前释放。