2010-01-11 6 views
2

하위 클래스가 alloc 및 init을 사용하여 인스턴스화했습니다. 초기화 메소드에서 내가 간다부모 클래스가 autorelease 풀을 사용하는 객체를 할당 할 수 있습니까?

self = [self initWithRect:spriteManager.imageRect spriteManager:spriteManager.manager]; 

따라서 부모 생성자는 자동 해제 풀을 사용하고 있습니다. 그럼 여기서 어떻게됩니까? 개체를 놓으려고하면 오류가 발생합니다. init 메소드를 alloc, copy, 새로운 소유권 정책을 준수하는 convience 생성자로 변경해야합니까?

답변

4

슈퍼 클래스의 초기화 프로그램 -initWithRect : spriteManager : 이 아니고 개체를 자동 해제 풀에 넣습니다. 명명 규칙은 모든 -init ... 메소드가 사용자가 해제 할 책임이있는 객체를 설정한다는 것입니다.

Xcode는 init 및 dealloc 메소드에 유용한 코드 완성 템플릿을 제공합니다. control-comma을 누르고 "init"또는 "dealloc"을 입력하기 만하면됩니다. (당신은 또한 초기화를 눌러 제어 쉼표를 입력 할 수 있습니다.) 초기화 템플릿은 위에서 쓴 줄 self = [super init]을 대체 할 것

- (id) init 
{ 
    self = [super init]; 
    if (self != nil) 
    { 
     // Your initializations 
    } 
    return self; 
} 

입니다. 그것의 슈퍼 클래스에서 상속 전화를 (물론 아무것도 : spriteManager :

의 dealloc 템플릿은

- (void) dealloc 
{ 
    // Your deallocations 
    [super dealloc]; 
} 

[super dealloc]이 당신의 -initWithRect에서 설정 한 어떤 발표를 돌봐 것입니다 슈퍼 클래스의 -dealloc를 호출입니다).

+0

감사합니다. 부모 정의를 조사 했어야합니다. – jacob

관련 문제