我正在尝试在块中的self
中获取变量和属性以完成操作,但是,如果我在self
中引用self
或全局变量时self
是运行块的对象,它警告我保留循环。这就是我正在做的事情:
NSMutableArray
类型(void(^)()
添加操作(换言之,返回void
没有参数的块)。我稍后使用此语法调用它,其中i
是由代码确定的int
(位于数组的边界内:
void(^ someBlock)()= arrayOfActions [i]; someBlock();
代码可以正常运行,但是,因为我在块中使用了self
的属性,所以Xcode警告我保留循环。我应该忽略它,因为它只是一个警告,一切都在代码中运行良好(它只执行一次块),或者我应该做一些不同的事情?
答案 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
注释。