您好,匿名用户

Method Swizzling中判断class_addMethod的意义何在?

0 投票
+ (void)load {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        SEL SD_SEL = @selector(sd_setImageWithURL:placeholderImage:options:progress:completed:);
        SEL CQ_SEL = @selector(cq_setImageWithURL:placeholderImage:options:progress:completed:);
        
        Method SD_METHOD = class_getInstanceMethod(self, SD_SEL);
        Method CQ_METHOD = class_getInstanceMethod(self, CQ_SEL);
        
        BOOL success = class_addMethod(self, SD_SEL, method_getImplementation(CQ_METHOD), method_getTypeEncoding(CQ_METHOD));
        if (success) {
            class_replaceMethod(self, SD_SEL, method_getImplementation(SD_METHOD), method_getTypeEncoding(SD_METHOD));
        } else {
            method_exchangeImplementations(SD_METHOD, CQ_METHOD);
        }
    });
}

如果我不判断,直接交换有什么隐患?在哪些情况下会触发?

用户头像 提问 5月22日 @ 爹妈罩我去战斗 上士 (1,676 威望)
分享到:

你的回答

隐私保护: 您的邮箱仅用于发送系统通知。
请输入验证码:
    图片验证码看不清?
登录注册后不会被要求输入验证码。

提一个问题:

相关问题

0 投票
1 回复 120 阅读
用户头像 提问 2012年 12月1日 @ Corki 中士 (1,208 威望)
0 投票
1 回复 60 阅读
+1 投票
1 回复 288 阅读
用户头像 提问 2012年 12月27日 @ Ares 下士 (909 威望)
0 投票
1 回复 198 阅读
0 投票
1 回复 334 阅读

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

IT技术交流群 - 随意问
欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...