美文网首页
__block 和__ weak 的区别

__block 和__ weak 的区别

作者: 箫声_筱昇 | 来源:发表于2018-08-29 14:46 被阅读11次

1:在 block 下循环引用的问题.
○ __block 本身并不能避免循环引用,避免循环引用需要在block内部把__block的obj置位nil。
○__weak则可以避免循环引用的出现,但是其会导致外部对象释放了之后,block 内部也访问不到这个对象的问题。如果要避免循环引用问题,则可以在block内部声明一个__strong的变量来指向weakObj,使外部对象能在block内部保持住。
2:__block和__weak在功能上的区别。
○ __block会持有该对象,即使超出了该对象的作用域,该对象还是会存在的,直到block对象从堆上销毁;而__weak仅仅是将该对象赋值给weak对象,当该对象销毁时,weak对象将指向nil;
○ __block可以让block修改局部变量,而__weak不能。
另外,在MRC中__block是不会引起retain,而在ARC中则会引起retain,所以在ARC中应该使用__weak。

因此,__block和__weak修饰符的区别其实是比较明显的:
1.__block不管是ARC还是MRC模式下都可以使用,可以修饰对象,还可以修饰基本数据类型。
2.__weak只能在ARC模式下使用,也只能修饰对象(NSString),不能修饰基本数据类型int。
3.__block对象可以在block中被重新赋值,__weak则不可以。
4.__block对象在ARC下可能会导致循环引用,非ARC下会避免循环引用,__weak只在ARC下使用,可以避免循环引用。

相关文章

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

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

  • 基础题

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

  • __block和__weak区别

    1.__block不管是ARC还是MRC模式下都可以使用,可以修饰对象,还可以修饰基本数据类型。 2.__weak...

  • __block和__weak区别

    1.Block可以访问局部变量,但是不能修改 如果修改局部变量,需要加__block __block int a ...

  • __block 和__ weak 的区别

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

  • __block和__weak的区别

    1.__block不管是ARC还是MRC模式下都可以使用,可以修饰对象,还可以修饰基本数据类型。 2.__weak...

  • __block和__weak的区别

    1.__block不管是ARC还是MRC模式下都可以使用,可以修饰对象,还可以修饰基本数据类型。 2.__weak...

  • __block和__weak的区别

    __block和__weak的区别 __block 在ARC和MRC下都可以使用,既可以修饰对象,也可以修饰基本数...

  • __block和__weak的区别

    一、__block 优点: 扩大变量的作用域。 控制对象的生命周期,防止循环引用。 是强引用,在非ARC环境下可以...

  • iOS琐碎总结

    1.为什么代理要用weak?代理的delegate和dataSource有什么区别?block和代理的区别? A:...

网友评论

      本文标题:__block 和__ weak 的区别

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