2012-03-18 67 views
0

我看到一些我不明白的奇怪行爲。 我有一個助手類HelperClass,它分配並保留在超類SuperClass中。Dealloc沒有在超類中調用

在超類的dealloc函數中,我釋放了HelperClass。這很好。但是,當我的子類,HelperClass被釋放,但在HelperClass dealloc不會因爲某種原因而被調用。它在我釋放子類中的HelperClass時工作。

任何想法這可能是什麼?

(編輯:它似乎很好地工作,如果我顯式調用[助手類的dealloc]而不是[助手類發佈],但該這樣做的正確方法?)

@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。

助手是一個簡單的NSObject類:

@interface PlayerHelper : NSObject 
+0

什麼是超'SuperClas s'?你能發佈相關的代碼嗎? – GarlicFries 2012-03-18 23:04:19

+0

向我們展示一些您分配/取消分配HelperClass的代碼,以及HelperClass未取消分配的具體示例。不要手動調用'dealloc'。 – JiaYow 2012-03-18 23:06:10

+0

更清楚了嗎? – 2012-03-18 23:17:50

回答