Il wiki CocoaDev ha una vasta discussione sul metodo swizzling here. Mike Ash ha una relativamente semplice implementazione in fondo a quella pagina:
#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);
}
non ho ancora testato questo, semplicemente perché mi considerano metodo swizzling come un processo estremamente pericoloso e non ho avuto la necessità di utilizzare ancora.
fonte
2009-10-28 17:53:31
grazie che ha funzionato. La chiave per l'utilizzo era la #import #import –
dizy
Wiki link no worky – funkybro
@funkybro - Grazie per averlo fatto notare. Ho tirato fuori una versione archiviata della pagina, prima che fosse rimossa. Quando il wiki ritorna, sostituirò il link all'archivio. –