2012-03-18 6 views
0

나는 이해하지 못하는 이상한 행동을 봅니다. 헬퍼 클래스 HelperClass가 있는데, 이는 슈퍼 클래스 SuperClass에 할당되어 유지됩니다.슈퍼 클래스에서 Dealloc이 호출되지 않았습니다.

수퍼 클래스의 dealloc 함수에서 HelperClass를 해제합니다. 이것은 괜찮습니다. 하지만 하위 클래스를 만들면 HelperClass가 해제되지만 HelperClass에서 dealloc은 어떤 이유로 호출되지 않습니다. 하위 클래스에서 HelperClass를 해제하면 작동합니다.

어떻게 생각하나요?

:

:

@interface SuperClass : UIViewController { 

    @protected 
    PlayerHelper* _mediaPlayerHelper;  
} 

@end 

에 개시 (? 편집 내가 명시 적으로 [HelperClass의 dealloc] 대신 [HelperClass 릴리스] 전화 만이이 일을 적절한 방법이 있다면 잘 작동하는 것 같다) 할당 해제와

- (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은 호출되지 않습니다. 사용

@interface PlayerHelper : NSObject 
+0

이의 슈퍼 클래스 무엇입니까

도우미는 간단한 NSObject의 클래스입니다 'SuperClas s'? 관련 코드를 게시 할 수 있습니까? – GarlicFries

+0

HelperClass를 할당/할당 해제하는 코드와 HelperClass가 할당 해제되지 않은 구체적인 예를 보여줍니다. 'dealloc'을 수동으로 호출하지 마십시오. – JiaYow

+0

그게 더 명확합니까? –

답변

관련 문제