gpt4 book ai didi

objective-c - 我真的可以像这样检查 block 中的实例变量吗?

转载 作者:行者123 更新时间:2023-12-02 21:44:41 25 4
gpt4 key购买 nike

This tutorial建议您可以这样做:

dispatch_async(queue, ^{
if (_valid) {
[self processFile:fileURL];
}
});

但我对此表示怀疑。 block 复制变量的值(捕获范围)。所以 _valid 是 YES 或 NO 取决于我创建这个 block 时的情况。该 block 将使用此捕获的值,而不查找实例变量的实际值。对吗?

最佳答案

The block would use this captured value and not look up the actual value of the instance variable. Correct?

没有。对于实例变量,self 被捕获,实例变量被评估为 self->_valid,即 block 运行时的值。

这就是为什么在某些情况下您会收到来自 ARC 的警告,例如隐式捕获 self 可能会导致引用循环。

这也是您应该始终使用属性而不是直接使用实例变量的另一个原因。它清楚明确地表明 self 被捕获,而不是属性。

关于objective-c - 我真的可以像这样检查 block 中的实例变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19743733/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com