Runtime
文章平均质量分 66
Runtime
熊小憨
这个作者很懒,什么都没留下…
展开
-
Runtime
Objective-C 扩展了 C 语言,并加入了面向对象特性和 Smalltalk 式的消息传递机制。而这个扩展的核心是一个用 C 和 编译语言 写的 Runtime 库。它是 Objective-C 面向对象和动态机制的基石。Objective-C 是一个动态语言,这意味着它不仅需要一个编译器,也需要一个运行时系统来动态地创建类和对象、进行消息传递和转发。理解 Objective-C 的 Runtime 机制可以帮我们更好的了解这个语言,适当的时候还能对语言进行扩展,从系统层面解决项目中的一些设计或技原创 2021-04-15 09:41:33 · 62 阅读 · 0 评论 -
消息传递
前言一个对象的方法,编译器转成消息发送(objc_msgSend)时执行的流程是这样的:首先,通过object的isa指针找到它的class;在class的method list找method;如果class中没到method,继续往class的superclass中找;一旦找到method,就去执行method的IMP。由于效率的问题,每个消息都遍历一次objc_method_list并不合理。所以需要把经常被调用的函数缓存下来,去提高函数查询的效率。这也就是objc_class中另一个重原创 2021-04-15 10:37:15 · 89 阅读 · 0 评论 -
消息转发
归根到底,Objective-C中所有的方法调用本质就是向对象发送消息。class中创建method。iOS为该method创建一个编号,即:SEL(method),并添加到方法列表中。(selector是SEL的一个实例,这点和IMP是不一样的,IMP是指向最终实现程序的内存地址的指针)当调用该method的时候,系统从方法列表中查找这个方法的编号,查到就执行。所以如果调用了一个方法,就会进行一次发送消息,会在相关的类对象中搜索方法列表;如果找不到则会沿着继承树向上一直搜索,直到继承树根部(原创 2021-04-15 11:45:40 · 112 阅读 · 0 评论
分享