参考资料
2、iOS runtime 之 Class 和 MetaClass
一下表述参考了上述资料,并结合自身研发经验总结整理。如有谬误欢迎指正。
基础概念
类对象(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值。
属性和成员变量
一些建议:
1.如果只是单纯的private变量,最好声明在implementation里.
2.如果是类的public属性,就用property写在.h文件里
3.如果自己内部需要setter和getter来实现一些东西,就在.m文件的类目里用property来声明
上述文字资料未完待续.....
网友评论