2012-03-18 14 views
0

私は理解していないいくつかの奇妙な動作を見ます。 私はヘルパークラスHelperClassを持っています。ヘルパークラスはスーパークラスSuperClassに割り当てられ、保持されています。スーパークラスでDeallocが呼び出されていない

スーパークラスのdealloc関数では、HelperClassを解放します。これは大丈夫です。しかし、サブクラス化すると、HelperClassが解放されますが、HelperClass deallocでは何らかの理由で呼び出されません。私がサブクラスでHelperClassをリリースしたときに動作します。

これはどのような考えですか?

(編集:?私が明示的に[helperClassのにdealloc]呼び出す代わりに[helperClassのリリース]場合は正常に動作するようですが、それこのこれを行うための適切な方法)

に開始
@interface SuperClass : UIViewController { 

    @protected 
    PlayerHelper* _mediaPlayerHelper;  
} 

@end 

deallocで
- (void)viewDidLoad 
{ 
    [super viewDidLoad];    
    // Add observer/helper for audio events 
    _mediaPlayerHelper = [[[PlayerHelper alloc] init:self] retain]; 
} 

- (void) dealloc { 
    if(_mediaPlayerHelper != nil) { 
     [_mediaPlayerHelper release]; 
    } 

    [super dealloc]; 
} 

私はこのようにサブクラス化した場合:

@interface SubClass : SuperClass 

このクラスを解放すると、HelperClassは正しく割り当て解除されません。ヘルパーを特にサブクラスでリリースすると動作します。 サブクラスを解放するとき、スーパークラスのdeallocは呼び出されますが、ヘルパーのdeallocは呼び出されません。

ヘルパーは、単純なNSObjectクラスである:

@interface PlayerHelper : NSObject 
+0

のスーパークラスである何'SuperClas s'?関連するコードを投稿できますか? – GarlicFries

+0

HelperClassが割り当て解除/解除されるコードと、HelperClassが割り当て解除されない具体的な例を示してください。 'dealloc'を手動で呼び出さないでください。 – JiaYow

+0

これは明確ですか? –

答えて

関連する問題