在一个块中保留循环

Retain loop in a block

我试图在块中获取 self 中的变量和属性以完成操作,但是,如果我在 self 中引用 self 或全局变量时 self 是对象 运行 块,它警告我保留循环。这是我正在做的事情:

代码运行良好,但是,因为我在块 中使用 self 的属性,Xcode 警告我存在保留循环。我应该忽略它,因为它只是一个警告并且在代码中一切正常(它只执行一次块),还是我应该做一些不同的事情?

您绝对不要忽略警告,而是使用__weak来定义弱引用并消除保留循环,如in the documentation所述:

__weak SelfType *weakSelf = self;

void (^aBlock)() = ^(){
    SelfType *strongSelf = weakSelf;
    //User strongSelf
};

或者,您可以使用 libextobjc (https://github.com/jspahrsummers/libextobjc) 及其方便的 @strongify@weakify 注释。