1. Class的结构
Class的结构.png
2. class_rw_t
class_rw_t里面的methods、properties、protocols是二维数组,是可读可写的,包含了类的初始内容、分类的内容
class_rw_t.png
3. class_ro_t
class_ro_t里面的baseMethodList、baseProtocols、ivars、baseProperties是一维数组,是只读的,包含了类的初始内容
class_ro_t.png
4. method_t
method_t.png
5. Type Encoding
iOS中提供了一个叫做@encode的指令,可以将具体的类型表示成字符串编码
Type Encoding.png
6. 方法缓存
Class内部结构中有个方法缓存(cache_t),用散列表(哈希表)来缓存曾经调用过的方法,可以提高方法的查找速度
缓存查找
在objc源码的objc-cache.mm文件内
方法bucket_t * cache_t::find(cache_key_t k, id receiver)
方法缓存.png
@dynamic
@dynamic是告诉编译器不用自动生成getter和setter的实现,需要用户自己实现。









网友评论