2012-08-05 2 views
2

class_addProtocol에 대한 documentation은 매우 기본적이고 실제로 사용법을 설명하지 않습니다.class-addProtocol은 Objective-C에서 실제로 무엇을합니까?

필자가 생각하기에 런타임에 클래스에 프로토콜을 추가하려면 class_addMethod을 호출하여 프로토콜의 각 메서드를 추가 한 다음 class_addProtocol을 호출해야합니다. 내가 이해할 수없는 것은 인 경우이유class_addProtocol으로 전화해야합니다. 모든 프로토콜 방법을 추가하면 클래스가 이미 프로토콜을 준수하므로 실제로 class_addProtocol은 무엇을합니까?

답변

3

셀렉터 -conformsToProtocol:을 사용할 수 있습니다. 어떤 상황에서는 (여러 대의원이있을 수도 있고, 다른 사람이 아닌 특정 사안에 응답해야 할 수도 있습니다), 요청하는 단일 메서드 대신 개체가 프로토콜에 응답하는지 여부를 확인하는 것이 유용합니다.

대개의 경우 이것은 문제가되지 않습니다. 대부분의 경우 -respondsToSelector:으로 충분하지만 편리 할 수있는 좋은 도구입니다.

-conformsToProtocol에 대해 class_conformsToProtocol을 거의 사용하지 않아야합니다. 수퍼 클래스를 확인하지 않고 문제가 발생할 수 있으므로주의하십시오.

+0

필자는 항상'conformsToProtocol'이 프로토콜의 모든 필수 메소드에 대한'respondsToSelector'의 논리적 AND와 동일하다고 가정합니다. 그러나 클래스가 실제로 수행하는지 또는 프로토콜에 관계없이 프로토콜을 채택하는지 선언하는지 여부를 반환합니다. 아니. 이 점을 이해하도록 도와 주셔서 감사합니다. – jhabbott

+0

@jhabbott : 필요한 메소드를 정의하지 않는 프로토콜을 생각해보십시오. 클래스가 클래스를 준수한다고 선언 된 경우 클래스가 준수하는지 여부를 "논리 AND"방식으로 어떻게 결정할 수 있습니까? –

+0

@JonathanGrynspan 제로 인수 AND는 '참'입니다. 그러나이 행동에 대한 또 다른 이유가 있습니다. 두 클래스가 같은 이바라를 가지고 있다면, 오리 타잉과는 달리 여전히 동일하지 않습니다. 원리는 여기에서도 마찬가지입니다. –

관련 문제