【发布时间】:2012-01-25 13:36:32
【问题描述】:
是否可以在没有来自 self 的 __weak 对象的情况下在块中传递 [self anyFunction]?
例如,这是来自系统框架的有效代码:
[UIView animateWithDuration:0.8 animations:^{
//Do animationStuff
} completion:^(BOOL finished) {
[self anyFunction];
}];
您可以在完成块中传递[self anyFunction] 而不会发出警告。但是,如果您使用完成块编写自己的方法,则会出现以下警告:在此块中强烈捕获 'self' 可能会导致保留循环。
一个可行的解决方案非常简单(iOS 5 + ARC)。块声明前:
__weak MyClass *weakSelf = self;
在完成块中你必须调用:
[weakSelf anyFunction];
但是,回到我的问题:为什么系统框架 API 中不需要使用 __weak 对象并在没有任何警告的情况下使用 self。以及如何在块中实现不需要__weak 对象的方法?
感谢您的努力。
【问题讨论】:
标签: iphone objective-c ios automatic-ref-counting objective-c-blocks