iOS笔记

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。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。