使用Method Swizzling遇到的问题和项目中使用的Swizzling方案
导语: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,从而找到的具体的实现函数。
MethodLists示意图.png
开发中可以利用Objective-C的动态特性,在运行时替换selector对应的方法实现(IMP),达到给hook的目的。下图是利用Method Swizzling来替换selector对应IMP后的方法列表示意图。
非常好我支持^.^
(0) 0%
不好我反对
(0) 0%
下载地址
使用Method Swizzling遇到的问题和项目中使用的Swizzling方案下载
相关电子资料下载
- Isort:自动整理import的超实用工具教程 56
- 基于半桥LLC谐振变换器Mathcad和Matlab小信号建模分析 250
- 快速入门-Simplicity Studio开发环境安装、演示与工作项目 132
- 无刷电机小车开发记录—移植SimpleFOC流程 316
- 如何实现__import__()动态导入 432
- rom…import导入代码介绍 423
- import模块的导入方法 403
- 半导体红外测温|IMPAC红外测温仪解决方案 257
- 译文分享:XimpleWare诉Versata Software等一审判决(2014) 80
- 源译识 | 译文分享:XimpleWare诉Versata Software等一审判决(2014) 80