注:分析参考 MJ底层原理班 内容,本着自己学习原则记录
本文使用的源码为objc4-723
转 C++ 使用的命令 :
xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc -fobjc-arc -fobjc-runtime=ios-8.0.0 main.m
1 ARC 下,循环引用现象
2 ARC 下,解决循环引用
2.1 __weak
修饰对象
缺点:
- 无
- 推荐使用这种方式
2.2 __unsafe_unretain
修饰对象
缺点:
- 不安全
__weak
和__unsafe_unretain
区别
__weak
:不会产生强引用,指向的对象销毁时,会自动将指针置nil,防止野指针错误
__unsafe_unretain
:不会产生强引用,不安全,指向的对象销毁时,指针置存储的地址值不变
2.3 __block
修饰对象
缺点:
- block 必须要执行
- 必须在 block 执行完任务后手动将指针置 nil
3 MRC 下,循环引用现象
使用指令:
xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc -fobjc-runtime=ios-8.0.0 main.m
4 MRC 下,解决循环引用
MRC 下不支持
__weak
4.1 __unsafe_unretain
4.2 __block
- 源码是没什么看头,可以从上一篇文章《Block底层实现分析02-__block使用 第8.3点1.MRC》里确定,在 MRC 下
__block
的对象不会对 person 进行强引用
文/Jacob_LJ(简书作者)
PS:如非特别说明,所有文章均为原创作品,著作权归作者所有,转载需联系作者获得授权,并注明出处,所有打赏均归本人所有!