ARC
LLVM 自动添加 release、retain 等计数器操作,
runtime 处理 weak、copy 等关键字操作,达到自动管理内存目的。
load 与 initialize
load:runtime 直接拿IMP去调用,1个类或分类只调一次,superclass -> class -> category,category 中先编译先调用。
initialize:通过 objc_msgSend 调用,会调用多次。
Category
值:objc_setAssociatedObject 添加的属性值,保存在 AssociationsManager 里。
方法:编译成 category_t 结构体,用 memcpy 同步到 class_rw_t 中 class 方法的前面,方法调用时遍历 class_rw_t 里的方法。
消息机制
1、消息传递:用 isa 找到类,找 catch<selector, IMP> ,再找 class_rw_t 的 methods 添加到 catch 中,都没有就交给 superclass。
2、动态解析:调用 resolveMethod,在其中用 class_addMethod 添加IMP;调用 forwardingTarget 获取响应对象;调用 methodSignature 获取签名,在其中 forwardInvocation。