2010-05-20 3 views
14

, 당신은, 구현 내에서 명시 적으로 오버라이드 (override) 한 경우에도, 슈퍼 클래스의 메소드를 호출 할 수있는 방법, 즉 :Objective-C 객체의 수퍼 클래스에 대한 메소드를 다른 곳에서 어떻게 호출합니까? 서브 클래스를 구현하는 경우

[self overriddenMethod]; //calls the subclass's method 
[super overriddenMethod]; //calls the superclass's method 

당신은 슈퍼 클래스의 메소드를 호출 할 경우 하위 클래스의 구현 외부에서 가져온 것입니다 (예 :

[[object super] overriddenMethod]; //crashes 

이 경우도 가능합니까? 당신이 있다면

[[super super] overriddenMethod]; //will this work? 

답변

20

더 적절한 옵션은 당신을 위해 그것을 수행하는 카테고리 방법을 추가하는 것입니다.

13

당신은 [[[object class] superclass] methodForSelector: ...]를주고 당신이 원하는 경우, 직접 IMP 포인터를 통해 호출 할 수 있습니다 ...하지만 : 그리고 확장함으로써, 구현 내에서 하나 개 이상의 수준, 예를 갈 수 있습니다 이렇게하면 응용 프로그램의 디자인에 문제가 생길 수 있습니다.

- (void) callSuperMethod { [super overriddenMethod]; } 

이 작업을 수행하는 더 편리한 방법이 더이 있다는 사실은 디자인에 의해 매우 많이 (디버깅)

+1

디자인되지 않았습니다. 디버깅에 필요합니다. – executor21

+0

그런 경우에, 멀리 IMP. :) –