美文网首页iOS-Runtime
iOS runtime方法交换的使用

iOS runtime方法交换的使用

作者: 站在下一刻 | 来源:发表于2018-11-13 18:20 被阅读11次

    在iOS中,Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理。所以我们写代码时更加动态,比如我们可以把消息转发给我们想要的对象,或者随意交换一个方法的实现等,下面简单介绍下其中的方法交换的用法

    在很多时候,我们会自己写个方法来替换iOS原生的方法,具体的方法如下:

    Method origMethod = class_getClassMethod(class, orig);、

    Method newMethod = class_getClassMethod(class, new);

    获取某个class类的类方法

    对应的也有获取实例方法

    Method M1 = class_getInstanceMethod(class, orig);

    Method M2 = class_getInstanceMethod(class, new);

    然后执行交换方法的方法

    method_exchangeImplementations(origMethod, newMethod);

    交换两个方法

    如上所示,代码很简单,运用的好,可以方便的实现很多功能;一般都是通过写category的方式,一处替换,各处生效

    1,交换原生方法,添加自己的逻辑,比如imageWithNamed方法,如果图片资源的名字需要全部加上某个后缀,这样替换imageWithNamed方法就可以了

    2,添加crash逻辑判断,比如NSArray的objectAtIndex方法,可以替换成加上数据越界的判断,

    3,拦截原声方法,添加执行条件,两次交换方法,比如UIAlertView的show方法,替换show方法为fake_show,可以在fake_show实现中添加对alertView标题的判断来选择是否在次交换show方法来执行show方法;可以做到app全局控制alert的弹框

    相关文章

      网友评论

        本文标题:iOS runtime方法交换的使用

        本文链接:https://www.haomeiwen.com/subject/yzwtottx.html