我在接口上声明了这样的一个ivar:
BOOL controllerOK;
我必须在本身位于一个块中的一个块中使用此ivar。就像是
myBlockl = ^(){
[self presentViewController:controller
animated:YES
completion:^(){
if (controllerOK)
[self doStuff];
}];
};
如果我尝试这样做,则会看到警告:
在此块中强烈捕获自己可能会导致保留周期
if(controllerOK)行。
这似乎不是在块启动之前使用__unsafe_unretained创建另一个变量的那些块问题之一。首先是因为该指令不能与BOOL一起使用,其次是因为必须在运行时在块内测试ivar controllerOK。另一个问题是该块本身是在接口上声明的,因此将在创建它的上下文之外使用它。
我该如何解决?
最佳答案
这应该工作:
__weak id this = self;
myBlockl = ^(){
[self presentViewController:controller
animated:YES
completion:^(){
if (this->controllerOK)
[this doStuff];
}];
};