ios面向切面AOP(上) Objective-c版本
阿新 • • 發佈:2018-11-02
建立一個UIViewcontroller的category
</pre><pre name="code" class="objc">#import "UIViewController+AOP.h" #import <objc/runtime.h> @implementation UIViewController (AOP) + (void)load { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ Class class = [self class]; // Class class = object_getClass((id)self); swizzleMethod(class, @selector(viewDidLoad), @selector(aop_viewDidLoad)); }); } void swizzleMethod(Class class, SEL originalSelector, SEL swizzledSelector) { Method originalMethod = class_getInstanceMethod(class, originalSelector); Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector); BOOL didAddMethod = class_addMethod(class,originalSelector,method_getImplementation(swizzledMethod),method_getTypeEncoding(swizzledMethod)); if (didAddMethod) { class_replaceMethod(class,swizzledSelector,method_getImplementation(originalMethod),method_getTypeEncoding(originalMethod)); } else { method_exchangeImplementations(originalMethod, swizzledMethod); } } - (void)aop_viewDidLoad { [self aop_viewDidLoad]; }