gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 04:46:17 24 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/

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