Board logo

标题: iOS消息转发机制(3) [打印本页]

作者: look_w    时间: 2019-2-19 17:26     标题: iOS消息转发机制(3)

本来这个人实例吃吃睡睡挺滋润的,但是为了不荒废人生,还是该干点活的,所以除了吃和睡,强制让他去写代码改bug。

但是你会发现,强制他去做他不会的活,他就要革命了(crash)。在不做任何处理的情况下,这个人根本完成不了编程和解bug的活。所以作为组织领导,我们要教导下面的人,接到完不成的工作,应该积极响应,而不是搞什么革命。

所以某位同志做不了这个活的时候,我们教导他说:你应该这样做。

首先,当发现不能干这个活,那么你可以现学呀。

    //消息转发第一步 动态方法解析
    + (BOOL)resolveInstanceMethodSEL)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)forwardingTargetForSelectorSEL)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