2009-06-17 9 views
6

수퍼 클래스의 메소드를 끝으로 호출하면 문제가 발생합니까? 사람들은 환영하지만, 예를 들어ObjectiveC에서 수퍼 클래스의 메서드를 호출하는 타이밍이 중요합니까?

-(void)didReceiveMemoryWarning { 
    /* do a bunch of stuff */ 

    [super didReceiveMemoryWarning]; 
} 

등 viewWillAppear, willRotateToInterfaceOrientation 같은 다른 방법에 대한

-(void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 

    /* do a bunch of stuff */ 
} 

같은 질문 대 나는 (단지 문체, 또는 철학적하지 의미있는 차이를 둘

찾고

너무).

답변

6

일반적인 코코아 규칙은 : 당신은 설치를 수행하는 경우

  1. , 슈퍼 FIRST
  2. 하면 전화는 해적을 수행 중이며 수퍼 월스트린을

그래서 초기화, viewDidLoad 등 .. 첫 번째 경우 아래에 빠지다. 메모리 경고, viewDidUnload 및 dealloc은 두 번째 경우에 속합니다.

또한이 규칙에 따라 수업을 설계해야합니다. 모든 편차를 구체적으로 기록해야합니다. 관련

가 SO 답변 :

`[super viewDidLoad]` convention


을 추가하려면 : 이론적 근거를 설치하는 동안 슈퍼 처음 호출을 위해, 당신은 당신이 기능을 확장하기 전에 모든 것이 제자리에 있는지 확인하려면 것입니다. 결과적으로 할당을 해제 할 때 서브 클래스를 처리 할 수있는 슈퍼 클래스 ivars가 필요하지 않게됩니다.

아래의 설명과 마찬가지로 UI 업데이트에 대해서는 의미가 있습니다.

+0

평가에서 willRotateToInterfaceOrientation을 어떻게 분류 하시겠습니까? – fnCzar

+2

내 의견으로는, 그것이 설치라고 말하고 싶습니다. 슈퍼 클래스가 객체의 회전 (루트 뷰 객체를 포함 할 가능성이 높음)을 수행하기를 원한다고 생각한 다음 그 이후에 자신을 처리하려고합니다 (가장 가능성있는 하위 뷰). –

6

기능에 따라 다르지만, 수퍼 클래스가 그 일을 수행 한 후에 또는 무언가를하고 싶을 수도 있습니다.

예를 들어 수퍼 클래스에 일부 UI 요소가 있고이를 확장하면 클래스에 몇 가지 UI 요소가 추가로 포함됩니다. 전체 객체에 맞게 크기를 얻으려면 수퍼 클래스를 호출하여 요소의 크기를 계산 한 다음 추가 한 요소의 크기를 해당 크기에 더합니다.

슈퍼 클래스는 요소를 인식하지 않으므로 계산을 덮어 씁니다. 다시 말하지만, 이것은 구현에 달려 있습니다.

당신이 마지막으로 슈퍼 메소드를 호출 할 필요가 특정 경우가있다 :

-(void)dealloc 
{ 
    ... 
    [super dealloc]; 
} 
관련 문제