動態(tài)方法解析:
void method(id self, SEL _cmd, NSString *mes){
? ? NSLog(@"實現(xiàn)方法");
}
+ (BOOL)resolveInstanceMethod:(SEL)sel {
? ? if ([NSStringFromSelector(sel) isEqualToString:@"method"]) {
? ? ? ? returnclass_addMethod(self, sel, (IMP)method,"v@:@");
? ? }
? ? return NO;
}
快速轉發(fā):
- (id)forwardingTargetForSelector:(SEL)aSelector {
? ? if ([NSStringFromSelector(aSelector) isEqualToString:@"method"]) {
? ? ? ? //需要轉發(fā)的類
? ? ? ? return[NewClass new];
? ? }
? ? return [super forwardingTargetForSelector:aSelector];
}
慢速轉發(fā):
方法簽名:
- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector {
? ? if ([NSStringFromSelector(aSelector) isEqualToString:@"method"]) {
? ? ? ? return [NSMethodSignature signatureWithObjCTypes:"v@:@"];
? ? }
? ? return [super methodSignatureForSelector:aSelector];
}
消息轉發(fā):
- (void)forwardInvocation:(NSInvocation*)anInvocation {
? ? SELsel = [anInvocationselector];
? ? NewClass *newClass = [NewClass new];
? ? if([newClass respondsToSelector:sel]) {
? ? ? ? [anInvocationinvokeWithTarget:newClass];
? ? }
? ? [superforwardInvocation:anInvocation];
}
- (void)doesNotRecognizeSelector:(SEL)aSelector {
? ? //防止找不到方法崩潰
? ? NSLog(@"找不到方法");
}