Objective c 在超类中未调用Dealloc
我看到一些奇怪的行为,我不明白。 我有一个helper类HelperClass,它被分配并保留在超类超类中 在超类的dealloc函数中,我释放了HelperClass。这一切都很好。但是当我创建子类时,HelperClass被释放,但是HelperClass上由于某种原因没有调用dealloc。当我在子类中释放HelperClass时,它确实起作用 你知道这是怎么回事吗 (编辑:如果我显式地调用[HelperClass dealloc]而不是[HelperClass release],似乎效果不错,但这是一种正确的方法吗?) 发起于:Objective c 在超类中未调用Dealloc,objective-c,Objective C,我看到一些奇怪的行为,我不明白。 我有一个helper类HelperClass,它被分配并保留在超类超类中 在超类的dealloc函数中,我释放了HelperClass。这一切都很好。但是当我创建子类时,HelperClass被释放,但是HelperClass上由于某种原因没有调用dealloc。当我在子类中释放HelperClass时,它确实起作用 你知道这是怎么回事吗 (编辑:如果我显式地调用[HelperClass dealloc]而不是[HelperClass release],似乎效果
- (void)viewDidLoad
{
[super viewDidLoad];
// Add observer/helper for audio events
_mediaPlayerHelper = [[[PlayerHelper alloc] init:self] retain];
}
与dealloc:
- (void) dealloc {
if(_mediaPlayerHelper != nil) {
[_mediaPlayerHelper release];
}
[super dealloc];
}
如果我将其子类化为:
@interface SubClass : SuperClass
如果释放这个类,HelperClass不会得到正确的dealloc-ed。如果我专门在子类中释放helper,它会起作用。
释放子类时,将调用超类的dealloc,但不会调用helper中的dealloc
助手是一个简单的NSObject类:
@interface PlayerHelper : NSObject
你在这里是双重保留
[[[PlayerHelper alloc] init:self] retain];
而是使用:
[[PlayerHelper alloc] init:self];
什么是
超类的超类?您可以发布相关代码吗?向我们展示一些分配/取消分配HelperClass的代码,以及一个未取消分配HelperClass的具体示例。不要手动调用dealloc
。
[[PlayerHelper alloc] init:self];