我在接口上声明了这样的一个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];
      }];
};

10-08 07:28