美文网首页
__block和__weak修饰符的区别

__block和__weak修饰符的区别

作者: Silence_xl | 来源:发表于2020-07-11 17:29 被阅读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。
因此,__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修饰符的区别:__block不管是ARC还是MRC模式下都可以使用,可以修饰对象,还可...

  • iOS碎片化知识点汇总(持续更新)

    语言 weak, _ _weak 和 _ _block 修饰符 Objective-C中,weak用于修饰属性,_...

  • __weak __strong

    因此,__block和__weak修饰符的区别其实是挺明显的: 1.__block不管是ARC还是MRC模式下都可...

  • __block和__weak修饰符的区别

    __block和__weak修饰符的区别:1.__block不管是ARC还是MRC模式下都可以使用,可以修饰对象,...

  • OC面试题踩坑

    1. __block和__weak修饰符的区别 __block不管是ARC还是MRC模式下都可以使用,可以修饰对象...

  • 基础知识

    一,__block和__weak修饰符的区别: 1.__block不管是ARC还是MRC模式下都可以使用,可以修饰...

  • 常用关键词区别

    block和weak修饰符的区别? __block不管是ARC还是MRC模式下都可以使用,可以修饰对象,也可以修饰...

  • Ios中常见的问题(1)

    __block和__weak修饰符的区别其实是挺明显的:1.__block不管是ARC还是MRC模式下都可以使用,...

  • 随记

    __block和__weak修饰符的区别其实是挺明显的: 1.__block不管是ARC还是MRC模式下都可以使用...

网友评论

      本文标题:__block和__weak修饰符的区别

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