标签:
什么是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就是在程序运行时交换两个方法的实现
标签:
原文地址:http://www.cnblogs.com/xqios/p/4391813.html