您好,欢迎来电子发烧友网! ,新用户?[免费注册]

您的位置:电子发烧友网>源码下载>通讯/手机编程>

使用Method Swizzling遇到的问题和项目中使用的Swizzling方案

大小:0.2 MB 人气: 2017-09-22 需要积分:1

  导语:Method Swizzling是Objective-C中运行时中讨论较多的内容,本文主要介绍使用Method Swizzling遇到的问题和项目中使用的Swizzling方案。

  一、Method Swizzling简介

  Method Swizzling的本质是在运行时交换方法实现(IMP),如hook系统方法,在原有的方法中,插入自己的业务需求。

  1、Method Swizzling原理

  Objective-C的消息机制:在 Objective-C 中调用一个方法, 实际上是在底层通过 objc_msgSend()发送一个消息。 而查找消息的唯一依据是selector的方法名。

  //调用方法 [obj doSomething]; //[obj doSomething]本质上是给obj发doSomething消息 objc_msgSend(obj,@selector(doSomething))

  每一个OC实例对象都保存有isa指针和实例变量,其中isa指针所属类,类维护一个运行时可接收的方法列表(MethodLists);方法列表(MethodLists)中保存selector的方法名和方法实现(IMP,指向Method实现的指针)的映射关系。在运行时,通过selecter找到匹配的IMP,从而找到的具体的实现函数。

  使用Method Swizzling遇到的问题和项目中使用的Swizzling方案

  MethodLists示意图.png

  开发中可以利用Objective-C的动态特性,在运行时替换selector对应的方法实现(IMP),达到给hook的目的。下图是利用Method Swizzling来替换selector对应IMP后的方法列表示意图。

非常好我支持^.^

(0) 0%

不好我反对

(0) 0%

      发表评论

      用户评论
      评价:好评中评差评

      发表评论,获取积分! 请遵守相关规定!