美文网首页
__block与__weak的区别

__block与__weak的区别

作者: Oo哔哔哔 | 来源:发表于2016-11-04 13:48 被阅读0次

block下循环引用的问题


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

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



__block与__weak功能上的区别。


__block会持有该对象,即使超出了该对象的作用域,该对象还是会存在的,直到block对象从堆上销毁;而__weak仅仅是将该对象赋值给weak对象,当该对象销毁时,weak对象将指向nil;

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

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


相关文章

  • 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可以修饰对象和基本数据类型 weak只能修饰对象,也只能在ARC下使用 bl...

  • __block与__weak的真正区别

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

网友评论

      本文标题:__block与__weak的区别

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