2012-05-19 2 views
1

NSObject 프로토콜의 하위 프로토콜을 추가 메서드로 정의한 다음 NSObject에 해당 범주를 정의하고 구현하면 컴파일시 경고가 표시됩니다. 컴파일러는 NSObject 카테고리가 NSObject 프로토콜에 선언 된 모든 메소드를 구현하지 않는다고 불평합니다.NSObject 클래스 구현시 구현되지 않은 메서드 경고가 발생합니다.

이유가 무엇인지 이해할 수 없습니다. <Foundation/NSObject.h>NSObject 클래스는 (그것이 이러한 방법) 구현하는, 중복의 NSObject 프로토콜을 준수 (그리고 선언? - 그게 충분하지 않아야

여기에 문제의 원인이 무엇

샘플 코드를? - 당신이 컴파일하는 경우, 당신은 NSObject (CategoryToImplementMyProtocol) 구현에 경고를 볼 수 있습니다 :이를 해결하는 몇 가지 질문을 찾았지만, 모든 답변은 "이 해결 방법을!"다양한 아니었다 "그

@protocol MyProtocol <NSObject> 
- (void)myMethod; 
@end 

@interface NSObject (CategoryToImplementMyProtocol) <MyProtocol> 
@end 

@implementation NSObject (CategoryToImplementMyProtocol) 

- (void)myMethod 
{ 
    NSLog("A la peanut butter sandwiches!"); 
} 

@end 

이것이 문제의 원인 "다양성 (또는 단지 평범한 잘못, 받아 들여지는에도 불구하고 ...). 나는이 문제를 해결할 수 있다는 것을 알고있다. 나는 을 이해하고 정말로 왜인지를 알고 싶다.

답변

1

문제는 다시 <NSObject> 프로토콜 채택을 선언하는 것입니다. 프로토콜이 Objective-C에서 작동하는 방식 (더 좋거나 나쁨)은 카테고리 구현이 인터페이스에 지정된 모든 프로토콜을 구현해야한다는 것입니다.

또한 프로토콜 적합성은 Objective-C의 구조보다 명목상의 것입니다. 즉, 클래스가 올바른 메소드에 응답하는 것은 그 프로토콜을 채택하기에 충분하지 않습니다.

편집은 : 예제 코드를 변경 한 것, 그리고 내 대답은 더 이상 정말 관련이없는 것 같아요.

+1

죄송합니다. 코드를 옮길 때 실수였습니다 (어떤 위안이라도 답을보기 전에 질문을 편집했습니다 - 여전히 의미가 있다고 생각하지만, "MyProtocol"은 NSObject의 서브 프로토콜이므로). –

+0

:)하지만이 사건 (내가 깨닫지도 못했지만)은 내가 대답 한 것보다 약간 혼란 스럽다고 생각합니다. 왜냐하면 ''을 상속받은 클래스들에 그러한 카테고리들을 구현하는 것과 같은 문제가 없기 때문에 그것 자체를 채택하지는 않는다. –

+0

네, 여전히 문제를 완전히 보지 못했습니다 - 왜 주 카테고리의 NSObject 클래스가 이미 NSObject 프로토콜을 준수한다고 선언하는 것만으로는 부족합니까? –

관련 문제