__weak与__block修饰符到底有什么区别

转载 2016年04月21日 14:49:23

API Reference对__block变量修饰符有如下几处解释:

//A powerful feature of blocks is that they can modify 
variables in the same lexical scope. You signal that a block 
can modify a variable using the __block storage type 
modifier. 

//At function level are __block variables. These are mutable
 within the block (and the enclosing scope) and are preserved
 if any referencing block is copied to the heap.

大概意思归结出来就是两点: 
1.__block对象在block中是可以被修改、重新赋值的。 
2.__block对象在block中不会被block强引用一次,从而不会出现循环引用问题。

API Reference对__weak变量修饰符有如下几处解释:

__weak specifies a reference that does not keep the 
referenced object alive. A weak reference is set to nil when
there are no strong references to the object.

使用了__weak修饰符的对象,作用等同于定义为weak的property。自然不会导致循环引用问题,因为苹果文档已经说的很清楚,当原对象没有任何强引用的时候,弱引用指针也会被设置为nil。

因此,__block和__weak修饰符的区别其实是挺明显的: 
1.__block不管是ARC还是MRC模式下都可以使用,可以修饰对象,还可以修饰基本数据类型。 
2.__weak只能在ARC模式下使用,也只能修饰对象(NSString),不能修饰基本数据类型(int)。 
3.__block对象可以在block中被重新赋值,__weak不可以。 
PS:__unsafe_unretained修饰符可以被视为iOS SDK 4.3以前版本的__weak的替代品,不过不会被自动置空为nil。所以尽可能不要使用这个修饰符。


转自:http://blog.csdn.net/abc649395594/article/details/45476925

__weak与__block修饰符到底有什么区别

API Reference对__block变量修饰符有如下几处解释://A powerful feature of blocks is that they can modify variables ...
  • abc649395594
  • abc649395594
  • 2015年05月04日 09:47
  • 8339

__weak与__block修饰符到底有什么区别 + 属性的特性简介

在使用block 时,为避免亲戚循环引用问题,我们一般常将外部变量用 __weak 或者 __block 关键字进行修饰。 __block和__weak修饰符的区别:  1...
  • QueenlySun
  • QueenlySun
  • 2016年10月14日 15:12
  • 749

iOS __weak与__block修饰符到底有什么区别

来源:http://www.bubuko.com/infodetail-782508.html API Reference对__block变量修饰符有如下几处解释: //A powerfu...
  • zhangwenhai001
  • zhangwenhai001
  • 2015年08月11日 20:03
  • 502

__weak与__block修饰符到底有什么区别 + 属性的特性

源文章网址:http://www.bubuko.com/infodetail-782508.html API Reference对__block变量修饰符有如下几处解释...
  • ShorewB
  • ShorewB
  • 2016年02月26日 16:25
  • 1500

__block 与 __weak的区别理解

Blocks理解: Blocks可以访问局部变量,但是不能修改 如果修改局部变量,需要加__block __block int multiplier = 7; int (^myBlock...
  • leikezhu1981
  • leikezhu1981
  • 2015年04月12日 13:39
  • 57806

MRC下安全的Block

iOS4以后引入的block,一个比较方便且实用的功能。但是自己在开发的时候遇到了不少的坑,很多都是和内存管理相关的,后来iOS5.0以后有了ARC,有了__weak关键字,所以block使用也就更安...
  • likendsl
  • likendsl
  • 2014年07月17日 14:59
  • 5015

四个修饰符到底有什么区别?

四个修饰符的区别
  • qq_32519097
  • qq_32519097
  • 2016年09月26日 21:54
  • 705

__weak与__block修饰符区别

变量修饰符:__weak和__block: __block:它修饰的对象在block中是可以被修改、重新赋值的,在block中不会被block强引用一次,从而不会出现循环引用问题。 __weak:使用...
  • weichuang_1
  • weichuang_1
  • 2015年12月05日 20:55
  • 146

__weak和__block探究与区别

准备工作 首先我定义了一个类 MyObject 继承 NSObject,并添加了一个属性 text,重写了description方法,返回 text 的值。这个主要是因为编译器本身对 NSStr...
  • iphonecat
  • iphonecat
  • 2016年04月23日 16:08
  • 1661

__weak 与 __block的区别理解

__weak 与 __block的区别理解 __block对象在block中是可以被修改、重新赋值的 如果局部变量是数组或者指针的时候只复制这个指针,两个指针指...
  • hncsy403
  • hncsy403
  • 2016年12月14日 09:22
  • 222
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:__weak与__block修饰符到底有什么区别
举报原因:
原因补充:

(最多只允许输入30个字)