您的位置:首页 > 其它

关于ARC中block的用法 及weak self等(持续更新)

2016-04-07 18:07 441 查看
今天看了一篇文章。先暂时作为开头。有空更新


前言

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

1
2
3
4
5
6
7
8
9
10

// 不知道这行代码的使用场景的同学你该去自习看看ARC的注意事项和Block的使用了
// AFNetworking的写法
__weak __typeof(&*self)weakSelf = self;

// 我之前一直这么写的
__weak __typeof(self) weakSelf = self;
// 或者这么写
__weak XxxViewController *weakSelf = self;
// 或者这么写
__weak id weakSelf = self;

当时也没注意为什么要写成&*这种样子… 今天再想起来, 搜了一圈, 终于让我找到原因了…


正文

其实以上的4种写法都是对的

AFNetworking里面不写成以上这行代码的原因是因为
typeof(self)
会被解析成
XxxViewController
*const __strong
(假如你的self是XxxViewController的话), 这样的话就就会报错…(没有老版本, 没有验证, 不过看网上的结论应该是这样了)

不过, 如果你写成了__typeof(self)也没什么问题… 那是因为在LLVM3.1之后已经不会出现以上的情况了… ( via )


总结

TODO: ARC的文档值得仔细看看http://clang.llvm.org/docs/AutomaticReferenceCounting.html
之前推荐的 Multithreading and Memory Management for iOS and OS X 是一本好书
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: