【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的博客技术分享
——————————————————————————————————
一、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的博客技术分享
——————————————————————————————————
相关文章推荐
- 一些常用的工具类方法
- objective学习笔记1
- Ljava.lang.Object;@ba8a1dc 问题
- Objective-c学习笔记之集合
- NSObject 排序
- 使用Objective-C的文档生成工具:appledoc
- django LazyObject类研究
- JsonObject&JSONArray
- JSONObject简介
- nib must contain exactly one top level object which must be a UITableViewCell instance
- 29When we call objective c is runtime language what does it mean?
- 28What are mutable and immutable types in Objective C?
- 26.Difference between protocol in objective c and interfaces in java?
- Objective-C语法之动态类型(isKindOfClass, isMemberOfClass,id)等
- Objective-C 动态绑定 学习笔记
- UiDevice的UiObject的讲解
- iOS用代码实现导航栏NavigationBar与跳转(Objective-C)
- iOS & Objective-C UIScrollView 图片缩放+居中
- OC第九天 内存管理
- HScrollViewWithTitleAndSlide