__cf_tsanReadFunction
可变字典的内存分 4 个部分:
Class isa :代表类实例的类型
id *buffer:指向可变字典保存的键值对
struct state:代表可变字典的各种状态
used 代表已经使用的空间大小,与开发者常用的 count 属性对应
mutbits 代表对字典变更的次数。初始化时是 1,增删会加 1
szidx 通过搭配 常量数组 __NSDictionarySizes ,获取字典的容量
copyeKeys: 代表需要复制 key
struct __cow_state_t *cow:会指向一个结构体 __cow_state_t
cow_lock:多线程对单个可变字典进行复制时,可能存在崩溃或者内存泄露,所以需要锁进行多线程保护
copyCount:16:代表对可变字典 copy的次数
mutableCopyCount:16:代表对可变字典进行 mutableCopy 的次数
NSMutableDictionary 通过引入一个指向结构体:__cow_state_t 的指针实现了 cow 机制
当复制发生时,__cow_state_t 的引用计数会加 1,并且多个字典会共享一份 __cow_state_t 和 buffer。从而实现常量时间的复制成本
__cf_tsanReadFunction
__cf_tsanReadFunction