OC面试相关

Objective-C 自动引用计数(ARC)的原理和内部实现

2019-02-16  本文已影响0人  LispLY

预备知识:Objective-C 引用计数的原理和内部实现

自动引用计数(ARC)的原理建立在原有的手动引用计数的基础上。

所有权修饰符

在 ARC 条件下,用户通过为变量添加所有权修饰符来代替手动输入 releaseretain
例如:id __strong obj = [NSObject new];
所有权修饰符共有4种:

__strong

__weak

__unsafe_unretained

__autoreleasing

ARC 的内部实现

ARC 是由编译器和运行时环境共同实现的。

__strong 修饰符的实现

__weak 修饰符的实现

为实现 __weak 修饰符的功能,系统会维护一个散列表(weak 表)。表的键为对象地址,对应的值为指向这个对象的所有 __weak 变量(可能为 1 或多个)。
当对象引用计数为 0 时,会自动调用 dealloc方法。dealloc 方法会做这些事:

参考
官方文档:Advanced Memory Management Programming Guide
坂本一树 / 古本智彦:Objective-C高级编程

上一篇下一篇

猜你喜欢

热点阅读