美文网首页面试
__block 与 __weak的区别是什么?

__block 与 __weak的区别是什么?

作者: 90后的晨仔 | 来源:发表于2021-02-19 21:55 被阅读0次

两者在功能上的区别?

__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 内部保持住,又能避免循环引用的问题。

相关文章

  • iOS开发基础--strong,weak,retain,assi

    weak和strong的区别: copy与retain的区别: __block和__weak修饰符的区别

  • __weak与__block区别

    原文链接:http://honglu.me/2015/01/06/weak与block区别/ 结论 __weak ...

  • __weak与__block区别

    首先我定义了一个类 MyObject 继承 NSObject,并添加了一个属性 text,重写了descripti...

  • __weak与__block区别

    公司最近在招 iOS,我面试了几个人,问到 block 避免循环引用的问题时,发现好多人都说通过添加__block...

  • __weak 与 __block 的区别

    Blocks理解: Blocks可以访问局部变量,但是不能修改 如果修改局部变量,需要加__block __blo...

  • __weak与__block的区别

    1.由上篇文章,已经了解到,weak是可以避免循环引用的,那么__weak的作用是什么呢,答案是:也是避免循环引用...

  • __block与__weak的区别

    block下循环引用的问题 __block本身并不能避免循环引用,避免循环引用需要在block内部把__block...

  • ios常见试题摘要(选自网络)

    ** __block __weak __strong __unsafe_unretained区别 **__bloc...

  • __block 与 __weak的区别是什么?

    两者在功能上的区别? __block会持有该对象,即使超出了该对象的作用域,该对象还是会存在的,直到block对象...

  • 基础题

    block和weak的区别 block可以修饰对象和基本数据类型 weak只能修饰对象,也只能在ARC下使用 bl...

网友评论

    本文标题:__block 与 __weak的区别是什么?

    本文链接:https://www.haomeiwen.com/subject/periectx.html