标题:
iOS消息转发机制(3)
[打印本页]
作者:
look_w
时间:
2019-2-19 17:26
标题:
iOS消息转发机制(3)
本来这个人实例吃吃睡睡挺滋润的,但是为了不荒废人生,还是该干点活的,所以除了吃和睡,强制让他去写代码改bug。
但是你会发现,强制他去做他不会的活,他就要革命了(crash)。在不做任何处理的情况下,这个人根本完成不了编程和解bug的活。所以作为组织领导,我们要教导下面的人,接到完不成的工作,应该积极响应,而不是搞什么革命。
所以某位同志做不了这个活的时候,我们教导他说:你应该这样做。
首先,当发现不能干这个活,那么你可以现学呀。
//消息转发第一步 动态方法解析
+ (BOOL)resolveInstanceMethod
SEL)sel{
NSString *selName = NSStringFromSelector(sel);
if ([selName hasPrefix
"developer"]) {
class_addMethod(self, sel, (IMP)shouldDoSomeThing, "v@:");
return YES;
}
return [super resolveInstanceMethod:sel];
}
//动态将实现转到这个函数
void shouldDoSomeThing(id self ,SEL _cmd){
NSLog(@"class:%@, sel:%s",self,sel_getName(_cmd));
NSLog(@"maybe i should do something like a developer");
}
给类动态创建一个方法实现,然后处理这个原本无法响应的方法。这步完成,消息得到处理,结束。
如果你是个懒人,不愿意学这个编程,那怎么办呢,那学会甩锅呀。
//消息转发第二步 备选接收者
- (id)forwardingTargetForSelector
SEL)aSelector{
Developer *dev = [[Developer alloc] init
"Huang"];
if ([dev respondsToSelector:aSelector]) {
return dev;
}
return [super forwardingTargetForSelector:aSelector];
}
去找了一个专业的开发人员,来处理这个这个问题,消息被转发给了Developer的实例,得到了处理,结束。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0