码迷,mamicode.com
首页 > 移动开发 > 详细

iOS--runtime / Swizzle

时间:2015-04-04 12:02:23      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:

什么是runtime

RunTimec又称运行时。就是系统在运行的时候的一些机制。

是一套底层的C语言API(包含很多强大实用的C语言数据类型、C语言函数)

平时我们编写的OC代码,最终都是转成了底层的runtime代码

如:
XqPersion *persion = [XqPersion alloc] init];

[persion run];

在编译时RunTime会将上述代码转化成:

objc_msgSend(persion,@selector(run));

 

runtim有什么用?

能动态产生,修改,删除一个类、一个成员变量、一个方法.

能够获得某个类内部的所有成员变量,方法

技术分享

 

Ivar * class_copyIvarList : 获得某个类内部的所有成员变量

Method * class_copyMethodList : 获得某个类内部的所有方法

Method class_getInstanceMethod : 获得某个实例方法(对象方法,减号-开头)

Method class_getClassMethod : 获得某个类方法(加号+开头)

method_exchangeImplementations : 交换2个方法的具体实现

 

什么是Swizzle?

在Objective-C中调用一个方法,其实是向一个对象发送消息,查找消息的唯一依据是selector的名字。

利用Objective-C的动态特性,可以实现在运行时偷换selector对应的方法实现,达到给方法挂钩的目的。

每个类都有一个方法列表,存放着selector的名字和方法实现的映射关系。IMP有点类似函数指针,指向具体的Method实现。

Swizzle就是在程序运行时交换两个方法的实现

技术分享

 

 

 

 

 

 

iOS--runtime / Swizzle

标签:

原文地址:http://www.cnblogs.com/xqios/p/4391813.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!