美文网首页iOS学习
OC中动态方法解析

OC中动态方法解析

作者: 指尖猿 | 来源:发表于2016-09-27 15:12 被阅读190次

    前面我们留下了一点东西没说,那就是如果某个对象调用了不存在的方法时会怎么样,一般情况下程序会crash,错误信息类似下面这样:

    unrecognized

    selector sent to instance 0x7fd0a141afd0

    但是在程序crash(缓存)之前,Runtime会给我们动态方法解析的机会,消息发送的步骤大致如下:

    1.检测这个selector是不是要忽略的。比如Mac OS X开发,有了垃圾回收就不理会retain,release这些函数了

    2.检测这个target是不是nil对象。ObjC的特性是允许对一个nil对象执行任何一个方法不会Crash,因为会被忽略掉

    3.如果上面两个都过了,那就开始查找这个类的IMP,先从cache里面找,完了找得到就跳到对应的函数去执行

    如果cache找不到就找一下方法分发表

    4.如果分发表找不到就到超类的分发表去找,一直找,直到找到NSObject类为止

    相关文章

      网友评论

        本文标题:OC中动态方法解析

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