OC runtime的学习笔记

1》runtime实现的机制是什么,怎么用,一般用于干嘛?

runtime是一套比较底层的纯C语言API, 属于1个C语言库, 包含了很多底层的C语言API。

在我们平时编写的OC代码中, 程序运行过程时, 其实最终都是转成了runtime的C语言代码, runtime算是OC的幕后工作者。

比如说,下面一个创建对象的方法中,

举例:

OC :

[[MJPerson alloc] init]

runtime :

objc_msgSend(objc_msgSend(“MJPerson” , “alloc”), “init”)

第二个问题

runtime 用来干什么呢??用在那些地方呢?怎么用呢?

runtime是属于OC的底层, 可以进行一些非常底层的操作(用OC是无法现实的, 不好实现)

在程序运行过程中, 动态创建一个类(比如KVO的底层实现)

在程序运行过程中, 动态地为某个类添加属性\方法, 修改属性值\方法

遍历一个类的所有成员变量(属性)\所有方法

例如:我们需要对一个类的属性进行归档解档的时候属性特别的多,这时候,我们就会写很多对应的代码,但是如果使用了runtime就可以动态设置!

Runtime原理:OC的底层实现需要首先被编译成C语言,继而被编译成汇编语言。所以当我们对性能有要求,或者OC不能满足需求时我们就可以使用runtime机制实现。了解了原理之后就可以利用runtime做一些OC做不了的事情。比如系统的字典转模型方法就是利用了runtime这一机制,在运行时动态遍历模型的属性,并赋值,再比如KVO动态监听就是利用runtime动态创建了一个新的类来描述被监听者的属性。我再说一下我们平时常用的runtime的一些方法吧。

1.交换系统方法。因为runtime机制会在OC执行方法时发送消息,将OC方法转换成C语言的函数,所以我们可以利用这一原理在控制器加载数据之前去动态替换系统方法,将一些复杂的代码极大的简化。比如在loadview方法中交换加载图片的方法,这样在程序运行的整个期间,都可以根据条件去加载不同的图片库,实现换肤的效果。避免了挨个换图片的麻烦。

2.获取类的属性和方法,这个和OC系统方法里的字典转模型类似,通过runtime方法遍历类的属性和方法。

3.给category添加属性。这一点弥补了category只能添加类的方法不能添加属性的不足,但是这样并不会为属性分配存储空间。所以还是要自定义变量去开辟一个空间去保存添加的属性。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 对于从事 iOS 开发人员来说,所有的人都会答出【runtime 是运行时】什么情况下用runtime?大部分人能...
    梦夜繁星阅读 3,832评论 7 64
  • 参考链接: http://www.cnblogs.com/ioshe/p/5489086.html 简介 Runt...
    乐乐的简书阅读 2,266评论 0 9
  • Runtime是什么 Runtime 又叫运行时,是一套底层的 C 语言 API,其为 iOS 内部的核心之一,我...
    SuAdrenine阅读 1,003评论 0 3
  • 目录 Objective-C Runtime到底是什么 Objective-C的元素认知 Runtime详解 应用...
    Ryan___阅读 2,032评论 1 3
  • 我是徐淑娜,大家都叫我倩倩,来自河北。自从今年4月份接触美乐家,到现在已经半年的时间,用了50多款产品,说真的,每...
    徐淑娜阅读 1,009评论 0 0

友情链接更多精彩内容