2011-01-07 1 views
1

하나의 메소드 호출을 동적으로 (런타임에) 다른 것으로 변환하려고합니다.objective-c에서 method_missing과 같은 기능 (런타임시 동적 위임)

[obj getAttribute: @"foo"] 

(I 동적으로이 일을하고 싶습니다 내가 미리 알고하지 않는 :에

[obj foo] 

가 위임 : 예를 들어

, 나는 다음과 같은 싶습니다 그 메소드 이름이나 속성이 될 것입니다). 하지만, 내가 "자기"로 객체를 유지하고 메소드 인수를 변환 할 만 위임을 위해 작동하는 것 같다 그건

- (id) forwardingTargetForSelector: (SEL) aSelector 

:

은 내가 후크에가 있음을 참조하십시오.

어디에서 이런 종류의 동작을 찾아야합니까? obj-c에서도 가능합니까?

+0

이것은 구현 방법의 실제 예입니다. http://stackoverflow.com/a/19661059/171933 –

답변

6

-forwardInvocation: 메서드를 사용할 수 있습니다. 메서드 호출을 나타내는 전체 NSInvocation 개체가 필요하며 원하는대로 처리 할 수 ​​있습니다. 이 경우 올바른 NSMethodSignature을 반환하려면 -methodSignatureForSelector:을 재정의해야합니다 (알 수없는 선택기에서 작동하려면 -forwardInvocation: 필요). 문제의 선택기를 처리 할 수 ​​있다고 선언하려면 -respondsToSelector:을 재정의하는 것이 좋습니다.