2009-08-17 3 views

답변

8

클래스 수준의 기능이 있다고 생각하지 않지만 두 가지 방법의 구현을 교환 할 수 있습니다. 이는 종종 poseAsClass:을 사용하는 목적이었습니다 (물론 필요한 경우 하나 이상의 방법을 교환 할 수 있습니다. 클래스 내의 복수의 메소드를 오버라이드 (override)합니다). Objective-C 2.0 런타임 (#import objc/runtime.h)에 method_exchangeImplementations이 필요합니다. 경고 단어 : method_exchangeImplementations를 호출 한 후 'new'메소드를 호출하면 실제로 원래 메소드 정의가 호출됩니다.

+0

감사합니다! 나는 mcandre의 대답과 당신이 링크 한 문서의 조합을 사용하여 이것을 작동시킬 수있었습니다. 빠른 노트 : 당신이 설명하는 메소드를 사용하기 위해서는 objc/runtime.h를'#include '해야했다. –

7

Lap Cat이 대안을 제시합니다.

+0

+1과 우수한 링크 주셔서 감사합니다. –

2

무엇을하려하십니까? 포즈를 취하는 방법은 종종 있습니다. 그래도 때때로 유일한 방법이라고 인정합니다 :)

+0

나는 코코아 애플리케이션에서 모든 바인딩 (바인딩 해제) 메시지를 추적하려고한다. 한 객체와 다른 객체 사이에 바인딩이있을 때마다'NSLog()'디버그 정보를 원합니다. NSObject에 대한 바인딩 메소드에서'method_exchangeImplementations'를 사용하여 끝내었고 트릭을했습니다. –

+0

당신이 좋아하는 것처럼 들리 네요. 나는 선적 코드에서 그것을하는 것을 조심해야합니다. –