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