美文网首页
RunTime_方法交换_kindOf/MemberOf/[se

RunTime_方法交换_kindOf/MemberOf/[se

作者: 行走在北方 | 来源:发表于2020-05-13 19:49 被阅读0次

    1、method-swizzling注意事项
    load方法使用

    1.在load方法内交换
        (需要注意的是load方法是在APP加载已经加载到内存)
    2.load方法是在main函数之前调用
    3.自动执行的,不需要手动执行
    4.唯一性,不用担心被子类覆盖
    

    方法交换MethodSwizzling

      1.比如想要系统的NSArray进行交换,那么你就应该用__NSArrayI,需要找到真正的方法的归属
      2.利用单例原则保证只执行一次
      3.子类没有实现父类的方法,导致调用交换,会找父类,但是父类没有swizzling的方法,会崩溃
        首先要尝试给自己添加方法,确保有交换的IMP SEL-> IMP
        然后再将父类的IMP给Swizzling  父类(IMP)-->  swizzzling
      4.交换没有实现的方法
          添加一个编号的实现  即使是空的方法编号SwizzlingMethod防止递归
          
          m_student  -->helloword
          helloWord --//>nil
    

    isKindOfClass isMemberOfClass

        1.isKindOfClass   
          源码内其实是两层循环
          第一层是元类和这个类对比
          第二层是元类的父类和这个类对比
        2.isMemberOfClass
          元类和类进行的对比
    

    【self class】 [super class]

            本质是消息的转发
            【self class】
              objc_msg_send (self class)
              [super classs] objc_msgSend_super(&objc_super,@selector(class))
              是会到父类的class但是class的消息接受者还是self类
    
    372500FD-062C-48B1-87E7-E35212D525C8.png

    相关文章

      网友评论

          本文标题:RunTime_方法交换_kindOf/MemberOf/[se

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