__block 与 __weak的区别是什么?

两者在功能上的区别?

__block会持有该对象,即使超出了该对象的作用域,该对象还是会存在的,直到block对象从堆上销毁;

__weak仅仅是将该对象赋值给weak对象,当该对象销毁时,weak对象将指向nil;

__block可以让block修改局部变量,而__weak不能。

MRC中__block是不会引起retain;但在ARC中__block则会引起retain。所以ARC中应该使用__weak。

循环引用的问题?

block下循环引用的问题

__block本身并不能避免循环引用,避免循环引用需要在block内部把__block修饰的obj置为nil

__weak可以避免循环引用,但是其会导致外部对象释放了之后,block 内部也访问不到这个对象的问题,我们可以通过在 block 内部声明一个 __strong的变量来指向 weakObj,使外部对象既能在 block 内部保持住,又能避免循环引用的问题。

相关推荐
lilili啊啊啊6 小时前
IOS奔溃日志分析-克魔ios开发助手实战-以支付宝奔溃日志为例
ios
lichao8904278 小时前
JBDev - Theos下一代越狱开发工具
ios
二流小码农11 小时前
鸿蒙开发:使用Ellipse绘制椭圆
android·ios·harmonyos
二流小码农12 小时前
鸿蒙开发:使用Circle绘制圆形
android·ios·harmonyos
Macle_Chen12 小时前
XCode中使用MonkeyDev开发iOS版的Comand-line Tool的daemon程序
macos·ios·xcode·逆向·comand-line
二流小码农13 小时前
鸿蒙开发:使用Rect绘制矩形
android·ios·harmonyos
丁乾坤的博客15 小时前
iOS审核被拒:Missing privacy manifest 第三方库添加隐私声明文件
ios·manifest·第三方库隐私文件
Unlimitedz17 小时前
iOS GCD
macos·ios·cocoa
布多17 小时前
AutoreleasePool:iOS 内存管理乐章中的隐秘旋律
ios·源码阅读
YungFan17 小时前
SwiftUI-国际化
ios·swiftui·swift