2011-12-09 2 views
1

알다시피, 내 오버로드 된 메서드 (카테고리)에서 [super method]을 호출하여 원래 클래스로 전달할 수 있습니다. 내 경우 나는 클래스의 헤더 파일이없는, 그래서 쓰기 :obj-c 카테고리의 오버로드 된 메소드 : 원본 클래스로 전달하는 방법?

@interface OriginalClass : NSObject 
@end 

@interface OriginalClass (overloadMethod) 
-(void) method; 
@end 

@implementation OriginalClass (overloadMethod) 
-(void) method 
{ 
    // some my code 
    [super method]; // here is warning that "NSObject may not respond to '-method' 
} 
@end 

그래서 헤더 파일을하지 않고 method 제대로 OriginalClass에 통과 할 수 있을까요? 어쩌면 method_setImplementation을 보는 것이 더 좋을까요?

답변

2

하위 클래스가 아닌 카테고리를 추가하고 있습니다. 카테고리를 추가 할 때는 기존 클래스에 고유 한 메소드를 추가하는 것으로 생각하십시오. 메시지를 super (이 경우 NSObject)으로 보내는 대신 self으로 보내주십시오. 카테고리를 추가 할 클래스를 구현한다고 가정 해보십시오. 당신이 서브 클래스하고 또는 스위 즐링 (swizzle)하려는 경우 생각한다면

나는 내가 정확히 기억 경우

+1

이 문제에 대한 나의 무지를 실례 첫 번째 대답에서 문서에서 인용,하지만 것 없다'[자기 방법]' 동일한 메소드의 재귀 호출에 대한 양? – Monolo

+0

Apple docs에 따르면'super '는 원래 클래스를 의미합니다. 같은 질문이 논의되었지만 여기서 해결되지 않았습니다 : http://stackoverflow.com/questions/1405060/using-super-in-an-objective-c-category – brigadir

+0

@Monolo 예, 그렇습니다. 이것이 내가 왜 카테고리에서 메소드를 오버라이드하는지 파악하려고하는 이유입니다. –

관련 문제