block 中的循环引用问题

2015-08-06 20:32:02 +08:00
 SeanChense

https://gist.github.com/SeanChense/b4dfb7db4e983e88e963

这样调用的话会引起 self 的循环引用吗?

1804 次点击
所在节点    iDev
6 条回复
tane05
2015-08-06 20:38:37 +08:00
不会,block捕获的是它作用域的变量.
wujichao
2015-08-06 20:58:37 +08:00
加了weakself肯定不会
但是 用self 也可能不会引起循环引用, 和 `foo handle:^{}` 的实现有关
pengjay
2015-08-06 21:34:22 +08:00
不会
SeanChense
2015-08-06 23:02:14 +08:00
@wujichao 怎么讲?
SeanChense
2015-08-06 23:02:46 +08:00
@tane05
@pengjay

谢谢
banxi1988
2015-08-07 14:04:46 +08:00
一般比较更好一写法是:

```objc
[foo handler: ^{
id strongself = weakself;
if(strongself){
[strongself doSomething]; // 直接用 weakself 有可能 crash,因为其可能变成了野指针
}
}];
```

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/211328

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX