面试iOS

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

2018-09-08  本文已影响12人  Jacob_LJ

注:分析参考 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修饰对象

缺点:

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:如非特别说明,所有文章均为原创作品,著作权归作者所有,转载需联系作者获得授权,并注明出处,所有打赏均归本人所有!

上一篇下一篇

猜你喜欢

热点阅读