2009-10-28 17 views
24

Próbowałem obu JRSwizzle i MethodSwizzle. Kompilują się dobrze na symulatorze, ale rzucają mnóstwo błędów, gdy próbuję skompilować dla urządzenia (3.x)Metoda Swizzle na urządzeniu iPhone

Czy ktoś miał szczęście swizzling na iphone? Co to za sztuczka?

TIA

Odpowiedz

54

CocoaDev wiki posiada szeroką dyskusję na temat metody swizzling here. Mike Ash ma stosunkowo prostą implementację na dole tej strony:

#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); 
} 

Nie testowałem tego, po prostu dlatego, że uważam metodę swizzling jako niezwykle niebezpiecznym procesem i nie miał potrzeby korzystania z niego jeszcze.

+3

dzięki, że zadziałało. Kluczem do tego było: #import #import dizy

+0

Wiki link no worky – funkybro

+0

@funkybro - Dziękuję za wskazanie. Odkopałem zarchiwizowaną wersję strony, zanim została ona usunięta. Kiedy wiki powróci, zastąpię link archiwum. –

Powiązane problemy