iOS笔记

2020-08-29  本文已影响0人  半熟木屋

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。

上一篇 下一篇

猜你喜欢

热点阅读