__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修饰符到底有什么区别 + 属性的特性简介

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

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

API Reference对__block变量修饰符有如下几处解释: //A powerful feature of blocks is that they can modify variable...

Unicode、UTF-8 和 ISO8859-1到底有什么区别

Unicode、UTF-8 和 ISO8859-1到底有什么区别 1.本文主要包括以下几个方面:编码基本知识,java,系统软件,url,工具软件等。 在下面的描述中,将以"中文"两个字为例...

Unicode、UTF-8 和 ISO8859-1到底有什么区别

文库上看到一篇不错的文章,转载一下: --------------------------------------------------------------------------------...
  • dzf203
  • dzf203
  • 2013年03月08日 14:38
  • 449

基于JDK动态代理和CGLIB动态代理的实现Spring注解管理事务(@Trasactional)到底有什么区别。

基于JDK动态代理和CGLIB动态代理的实现Spring注解管理事务(@Trasactional)到底有什么区别。 我还是喜欢基于Schema风格的Spring事务管理,但也有很多人在用基于@Tra...

动态代理和静态代理到底有什么区别,好处在哪里?

动态代理和静态代理到底有什么区别,好处在哪里?

WebAPP与Native APP到底有什么区别

Native App开发 Native App开发即我们所称的传统APP开发模式(原生APP开发模式),该开发针对IOS、Android等不同的手机操作系统要采用不同的语言和框架进行开发, 该模式...

仔细思考一个接口的不同实现得到的类和一个类的不同对象使用起来到底有什么区别?

最近在学习命令模式。 例子中是定义一个Command接口,其中只有一个execute方法声明。 接口的实现 因为接口是不指定构造方法的参数,也不指定成员变量的。所以你可以用任何形式实例化这个接口...

Web Service和WCF的到底有什么区别

【1】Web Service:严格来说是行业标准,也就是Web Service 规范,也称作WS-*规范,既不是框架,也不是技术。 它有一套完成的规范体系标准,而且在持续不断的更新完善中。 它使用...

20万、50万、100万的算法工程师,到底有什么区别?

转自https://zhuanlan.zhihu.com/p/27072134,作者@北冥乘海生   公元七世纪,在车迟国国家气象局组织的一次求雨活动中,虎力、鹿力、羊力三位大仙成功地祈下甘...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:__weak与__block修饰符到底有什么区别
举报原因:
原因补充:

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