首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

iOS消息转发机制(3)

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的实例,得到了处理,结束。
返回列表