2009-10-28 2 views
24

JRSwizzle과 MethodSwizzle을 모두 시도했습니다. 그들은 잘 시뮬레이터에 컴파일하지만 장치 (3.x)에 대한 컴파일하려고하면 무리를 던져메서드 Swizzle on iPhone 장치

아무도 아이폰에 swizzling 운이 있었나요? 그 트릭은 뭐니?

TIA

답변

54

CocoaDev 위키는 방법 스위 즐링 here에 대한 광범위한 토론이있다. 나는 매우 위험한 프로세스로 방법 스위 즐링 간주하고 아직 그것을 사용할 필요가 없었 간단하기 때문에,이 테스트를하지 않은

#import <objc/runtime.h> 
#import <objc/message.h> 
//.... 

void Swizzle(Class c, SEL orig, SEL new) 
{ 
    Method origMethod = class_getInstanceMethod(c, orig); 
    Method newMethod = class_getInstanceMethod(c, new); 
    if(class_addMethod(c, orig, method_getImplementation(newMethod), method_getTypeEncoding(newMethod))) 
     class_replaceMethod(c, new, method_getImplementation(origMethod), method_getTypeEncoding(origMethod)); 
    else 
    method_exchangeImplementations(origMethod, newMethod); 
} 

: 마이크 애쉬는 해당 페이지의 하단에있는 비교적 간단한 구현을 가지고있다.

+3

감사합니다. 그들은 이것을 사용하는 열쇠는 #import #import dizy

+0

위키 링크가 작동하지 않음 – funkybro

+0

@funkybro - 지적 해 주셔서 감사합니다. 나는 그것이 삭제되기 전에, 페이지의 보관 된 버전을 파 냈다. 위키가 다시 나타나면 보관 링크를 교체하겠습니다. –