保留块中的循环

时间:2015-06-09 15:18:26

标签: ios objective-c sprite-kit objective-c-blocks retain-cycle

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

  • 我正在向NSMutableArray类型(void(^)()添加操作(换言之,返回void没有参数的块)。
  • 我稍后使用此语法调用它,其中i是由代码确定的int(位于数组的边界内:

    void(^ someBlock)()= arrayOfActions [i]; someBlock();

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

1 个答案:

答案 0 :(得分:1)

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

__weak SelfType *weakSelf = self;

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

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