Я вижу странное поведение, которое я не понимаю.
У меня есть вспомогательный класс HelperClass, который выделяется и сохраняется в суперклассе SuperClass.
В функции dealloc суперкласса я освобождаю HelperClass. Это все хорошо. Но когда я создаю подкласс, HelperClass освобождается, но в HelperClass dealloc по какой-то причине не вызывается. Это работает, когда я выпускаю HelperClass в подклассе.
Есть идеи, как это может быть?
(Edit: кажется, работает нормально, если я явно называю [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 суперкласса, но не dealloc в помощнике.
Помощник - это простой класс NSObject:
@interface PlayerHelper : NSObject