2011-03-23 2 views
0

하나의 수퍼 클래스에서 파생 된 여러 하위 클래스가 있습니다. 이 슈퍼 클래스를 "classA"라고 부를 수 있습니다.iPhone - 하위 클래스에서 메소드를 호출하는 수퍼 클래스가 있습니다 ... (?)

클래스 A의 모든 하위 클래스에는 doStuff : (id) 보낸 사람이라는 메서드가 있으며 각 클래스의 모든 메서드는 해당 클래스를 기준으로 작업을 수행합니다.

문제는 클래스 A에서 doStuff를 호출해야한다는 것입니다.

어떻게하면됩니까?

나는 선언해야 doStuff :

- (void) doStuff:(id)sender { } 

같은 빈 방법으로를 ClassA에 (ID) 보낸 사람
, 그냥 제대로 컴파일 후 다시 선언 서브 클래스에 그것을 덮어해야 하는가? 이것이 올바른 방법일까요?

감사합니다.

답변

3

그 경우 좋은 방법입니다. 아무 것도하지 않는 기본 메소드를 수퍼 클래스에서 구현하십시오. 또는 구현을 제공하는 것을 잊지 않도록 예외를 throw 할 수 있지만 대개 구현에서 하위 클래스가 제공해야하는 헤더를 문서화하기에 충분합니다.

+0

좋습니다. 감사합니다. 나는 그 일을해야한다고 생각했지만 확신이 들지 않았습니다. 감사!!! – SpaceDog

+1

또 다른 대안은 ClassA의 코드에서 인트로 스펙 션을 사용하여 메시지를 보내는 것입니다 (예 :'[self performSelector : @selector (doStuff :) withObject : nil]'). 서브 클래스가 구현을 제공하지 않은 경우에도 예외가 발생합니다. 아마도 대부분의 경우 Kendall의 제안에 충실 할 것입니다. 단지 수퍼 클래스에서 빈 메서드를 만듭니다. – jlehr

+1

모든 하위 클래스가 가지고 있다는 의도가 있다면 개인적인 방법이 될 것이라면 어느 쪽이라도 갈 수 있지만 그 존재를 광고하는 것이 좋습니다. performSelector : withObject : 똑바로 호출하는 것보다 느립니다. 나는 거의 옵션으로 프로토콜을 사용한다고 언급했지만, 어쨌든 상속받을 때 모든 서브 클래스를 표시해야하는 것은 잘못된 것처럼 보입니다. –

관련 문제