Objective c 继承释放令?
在我当前的测试中,我有一个继承自“celestialClass”的类“PlanetClass”。我的问题是,当我释放我的“PlanetClass”物体时,它会经历两种释放方法,首先释放行星物体,然后释放天体。我把dealloc添加到了仙界,以确保我可以发布iVar“bodyName”,我想我有这个权利,我只是想检查一下Objective c 继承释放令?,objective-c,memory,dealloc,Objective C,Memory,Dealloc,在我当前的测试中,我有一个继承自“celestialClass”的类“PlanetClass”。我的问题是,当我释放我的“PlanetClass”物体时,它会经历两种释放方法,首先释放行星物体,然后释放天体。我把dealloc添加到了仙界,以确保我可以发布iVar“bodyName”,我想我有这个权利,我只是想检查一下 @implementation CelestialClass - (NSString *)bodyName { return [[bodyName retain] aut
@implementation CelestialClass
- (NSString *)bodyName {
return [[bodyName retain] autorelease];
}
- (void)setBodyName:(NSString *)newBodyName {
if (bodyName != newBodyName) {
[bodyName release];
bodyName = [newBodyName copy];
}
}
- (void) dealloc {
NSLog(@"_deal_CB: %@", self);
[bodyName release];
bodyName = nil;
[super dealloc];
}
@end
@implementation PlanetClass
- (int *)oceanDepth {
return oceanDepth;
}
- (void)setOceanDepth:(int *)value {
oceanDepth = value;
}
- (void) dealloc {
NSLog(@"_deal: %@", self);
[super dealloc];
}
@end
干杯-加里-发生的事情是行星类的任何实例都将在那里调用dealloc,然后它将调用dealloc
[super dealloc];
它调用了天体类dealloc,允许bodyName被释放
所以基本上,是的,你是对的。行星类的任何实例都会在那里调用dealloc,然后调用
[super dealloc];
它调用了天体类dealloc,允许bodyName被释放
所以基本上,是的,你是对的。没有-dealloc的魔力 当您调用
[super dealloc]
时,它的工作原理与任何其他方法中对超类的任何其他调用完全相同
这就是为什么调用[super dealloc]
必须始终是dealloc方法中的最后一行。如果不是,则调用NSObject的-dealloc,它将解除对象的分配,从-dealloc返回,然后尝试对self或self的实例变量执行某些操作,从而导致崩溃
所以,是的,您的代码——正如编写的一样——是正确的 使用-dealoc没有魔力 当您调用
[super dealloc]
时,它的工作原理与任何其他方法中对超类的任何其他调用完全相同
这就是为什么调用[super dealloc]
必须始终是dealloc方法中的最后一行。如果不是,则调用NSObject的-dealloc,它将解除对象的分配,从-dealloc返回,然后尝试对self或self的实例变量执行某些操作,从而导致崩溃
所以,是的,您的代码——正如编写的一样——是正确的 谢谢,仅供参考,“天体”[super dealloc]最终是否也会释放其父对象?或者它的工作原理不同吗?是的。只要每个子类都能很好地发挥作用,并在dealloc结束时调用[super dealloc],NSObject就会调用它的dealloc方法。谢谢,仅供参考,“天球”[super dealloc]最终也会释放它的父NSObject吗?或者它的工作原理不同吗?是的。只要每个子类都能很好地发挥作用,并在dealloc结束时调用[super dealloc],NSObject就会调用它的dealloc方法。