【发布时间】:2012-03-18 22:56:44
【问题描述】:
我看到一些我不理解的奇怪行为。 我有一个助手类 HelperClass,它被分配并保留在一个超类 SuperClass 中。
在超类的dealloc函数中,我释放了HelperClass。这一切都很好。但是当我子类化时,HelperClass 被释放,但由于某种原因没有调用 HelperClass 上的 dealloc。当我在子类中释放 HelperClass 时,它确实有效。
有什么想法吗?
(编辑:如果我明确调用 [HelperClass dealloc] 而不是 [HelperClass release] 似乎可以正常工作,但这是一种正确的方法吗?)
@interface SuperClass : UIViewController {
@protected
PlayerHelper* _mediaPlayerHelper;
}
@end
发起于:
- (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,而不是helper中的dealloc。
helper 是一个简单的 NSObject 类:
@interface PlayerHelper : NSObject
【问题讨论】:
-
SuperClass的超类是什么?能发下相关代码吗? -
向我们展示一些分配/解除分配 HelperClass 的代码,以及未解除分配 HelperClass 的具体示例。不要不要手动拨打
dealloc。
标签: objective-c