Block底层实现分析03-循环引用

注:分析参考 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


文/Jacob_LJ(简书作者)
PS:如非特别说明,所有文章均为原创作品,著作权归作者所有,转载需联系作者获得授权,并注明出处,所有打赏均归本人所有!

推荐阅读更多精彩内容