私は理解していないいくつかの奇妙な動作を見ます。 私はヘルパークラス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
のスーパークラスである何'SuperClas s'?関連するコードを投稿できますか? – GarlicFries
HelperClassが割り当て解除/解除されるコードと、HelperClassが割り当て解除されない具体的な例を示してください。 'dealloc'を手動で呼び出さないでください。 – JiaYow
これは明確ですか? –