美文网首页
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