This tutorial建议你可以这样做:
dispatch_async(queue, ^{
if (_valid) {
[self processFile:fileURL];
}
});
但我持怀疑态度。 Blocks复制变量的值(捕获范围)。所以_valid将是YES或NO,具体取决于我创建此块时的内容。该块将使用此捕获的值,而不是查找实例变量的实际值。正确的吗?
答案 0 :(得分:5)
该块将使用此捕获的值,而不是查找实例变量的实际值。正确的吗?
没有。在实例变量的情况下,捕获self
并将实例变量计算为self->_valid
,即块运行时的值。
这就是为什么在某些情况下你会收到来自ARC的警告,关于隐式捕获self
会引起参考周期。
这也是您应该始终使用属性的另一个原因,而不是直接使用实例变量。它清楚明确地表明self
被捕获,而不是属性。