您的位置:首页 > 移动开发 > Objective-C

【Objective-C Runtime】之理解

2015-10-29 14:12 405 查看
——————————————————【我眼中的 OC - Runtime】——————————————————

一、RunTme是什么

(一)RunTime

1.(封装)

简单的说,是实现OC语言的C库,对象用C中的结构体表示,方法methods可以用C函数实现,再加上些额外的特性,被Runtime统统封装后,OC可以在程序运行时创建,查看,修改类和他们的方法。具体点说,就是看OC怎么用C语言实现的。。

2.(找出方法最终执行行代码)

一条消息(message)发送给对象(接受者),runtime库会让对象根据消息决定作出什么样的反应

3.里面有很多runtime库,自省检查和消息接受

(二)动态创建类

Key - Value Observing

调用objc_duplicateClass方法完成。方法不公开

使用s object_setClass()创建新类,(原来的类和新的类必须有相同的成员变量的布局)成员变量通过runtime访问,修改某个对象的类,科恩能够导致runtime无法找到对应的变量

(三)创建对象

给实例变量存储区域多分配一点额外的空间,为了获取这块空间起始指针(用 object_getIndexedIvars),然后就可以索引实例变量(ivars)。创建对象了

(四)消息派发

可以运行时再决定方法,将消息转发给其他对象,或发出异常。

runtime不需要知道Foundation。runtime会让程序定义转发函数(forwarding
function),当 objc_msgSend()无法找到该selector的实现时,那个转发函数就会被调用。程序一启动,CoreFoundation就将
-forwardInvocation:定义成转发函数。

二、RunTime能做什么?

(一)KVC中setValue - Crash - Ivar -
class_copyIvarList

(二)动态创建函数
class_addMethod

  (三)替换已有函数 
class_replaceMethod

(四)动态挂载 
objc_setAssociatedObject

——————————————————————————————————

最后要感谢  Anselz’s 于2014年5月发表的两篇关于Runtime的博客技术分享

——————————————————————————————————
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: