美文网首页
Runtime专题

Runtime专题

作者: 涵啸虎 | 来源:发表于2019-03-21 15:38 被阅读0次

参考资料

1、iOS Runtime详解

2、iOS runtime 之 Class 和 MetaClass

3、iOS成员属性和成员变量的区别

4、iOS 中成员变量、实例变量、属性 区分

一下表述参考了上述资料,并结合自身研发经验总结整理。如有谬误欢迎指正。


基础概念

类对象(objc_class)

实例(objc_object)

元类(Meta Class)

Method(objc_method)

SEL(objc_selector)

IMP

类缓存(objc_cache)

Category(objc_category)

消息传递基础概念思维导图

Object-C动态语言特性,动态的创建类和对象,消息传递和转发。

每一个类都是它的元类的对象。

每一个类里面声明的类方法,其本质就是把该类方法放到元类的方法列表上面,所以类在调用类方法时,可以想象成是元类的对象在调用一个实例方法。

震惊!!实操可以。

NSObject里面的所有实力方法,任意类都可以通过类方法调用。

元类中保存了创建类对象以及类方法所需的所有信息。???

任何NSObject继承体系下的meta-class都使用NSObject的meta-class作为自己的所属类,而基类的meta-class的isa指针是指向它自己。

实例方法的调用过程(objc_msgSend)

1、系统首先找到消息的接收对象,然后通过对象的isa找到它的类。

2、在它的类中查找method_list,是否有selector方法。

3、没有则查找父类的method_list。

4、找到对应的method,执行它的IMP。

5、转发IMP的return值。


属性和成员变量

重要:iOS成员属性和成员变量的区别   

一些建议:

1.如果只是单纯的private变量,最好声明在implementation里.

2.如果是类的public属性,就用property写在.h文件里

3.如果自己内部需要setter和getter来实现一些东西,就在.m文件的类目里用property来声明

上述文字资料未完待续.....

相关文章

网友评论

      本文标题:Runtime专题

      本文链接:https://www.haomeiwen.com/subject/dkgzmqtx.html