gpt4 book ai didi

objective-c - __block 属性声明

转载 作者:可可西里 更新时间:2023-11-01 06:18:49 25 4
gpt4 key购买 nike

我必须修复一些使用 LLVM(在 iOS 上)构建得很好的现有代码,以便它也可以使用 llvm-gcc-4.2 构建。除了在几个地方发现的这种模式外,我几乎完成了所有工作:

@property (nonatomic, retain) __block id myProperty;

我怀疑这里的意图是允许从 block 内部访问属性而不保留 self。 gcc 不支持这里的 __block 属性,如何去除它,但仍然达到相同的效果?

最佳答案

我会建议你发现了一个编译器错误,声明:

@property (nonatomic, retain) __block id myProperty;

没有意义。 __block 限定符用于局部(堆栈分配的)变量,因此它们通过引用传递给 block ,因此它们可以更新,并且通常 [*] 存储在堆而不是堆栈上。

因此,限定符 __block 对与对象实例相关的属性声明没有任何意义,对象实例在 Obj-C 中始终是堆分配的。

只需从属性声明中删除 __block - 对于每个编译器。

[*] 如果一个 block 从未被复制到堆中,编译器可能会优化 __block 变量而不将它们移动到堆中。

关于objective-c - __block 属性声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11515926/

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