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

__block和__weak修饰符的区别

作者: x了个w | 来源:发表于2017-12-21 18:54 被阅读25次

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/pltzwxtx.html