在不使用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
对象的方法?
感谢您的努力。
ivar
,因此您必须使用一个self
的__weak
对象。但是当我在使用块的函数中声明对象时,可以传递self
而不需要一个__weak
的对象。这很有道理。再次感谢。 - andreschneider