首页 > 其他 > 详细

weakself的另一种写法

时间:2016-01-21 15:43:09      阅读:283      评论:0      收藏:0      [点我收藏+]

在不久前看AFNetworking的源码时候发现了这么一句:

1
2
3
4
5
6
7
8
9
10
// 不知道这行代码的使用场景的同学你该去自习看看ARC的注意事项和Block的使用了
// AFNetworking的写法
__weak __typeof(self)weakSelf = self;

// 我之前一直这么写的
__weak XxxViewController *weakSelf = self;

其实以上的2种写法都是对的: 

__typeof(self): 获取到self的数据类型,会被解析成XxxViewController *const __strong (假如你的self是XxxViewController的话)

__typeof(self) 是获取到self的数据类型,这样定义出的weakSelf就是和self一个数据类型的, 加上__weak是建立一个弱引用,整句就是给self定义了一个弱引用性质的替身;这个一般用在使用Block代码块时会用到,因为Block代码块会copy它内部的变量,可能会造成循环引用, 无法释放self和该Block代码块的所属对象,而使用__weak性质的weakSelf替代原self,就可以切断block对原self的直接引用,从而避免循环引用

总结:__weak MyController *weakSelf = self 与 __weak __typeof(self)weakSelf = self 等价;

 

weakself的另一种写法

原文:http://www.cnblogs.com/hello-Huashan/p/5148353.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!