美文网首页iOS技术共享
__block和__weak的作用及区别

__block和__weak的作用及区别

作者: 壹貳叁肆伍 | 来源:发表于2018-01-15 22:56 被阅读10次

两者之间的区别:

__block不管是ARC还是MRC模式下都可以使用,而__weak只能在ARC模式下使用。

__block可以修饰对象和基本数据类型。 __weak只能修饰对象。

__block对象可以在block中被重新赋值,__weak不可以被重新赋值。 

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


在block中防止循环引用需要注意的问题:

__block本身不能避免循环引用,如要避免要在block中把 __block修饰的对象置为nil。另外需要注意在MRC模式下__block是不会引起retain;但是在ARC模式下__block则会引起retain。所以ARC中建议使用__weak。

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

相关文章

  • __block和__weak的作用及区别

    两者之间的区别: __block不管是ARC还是MRC模式下都可以使用,而__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环境下可以...

网友评论

    本文标题:__block和__weak的作用及区别

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