gpt4 book ai didi

objective-c - __block 实例变量问题上的属性。

转载 作者:可可西里 更新时间:2023-11-01 06:19:50 26 4
gpt4 key购买 nike

我在编译 Objective-C 类时遇到了以下错误:

VideoView.h:7: error: __block attribute can be specified on variables only

这里还有头文件的重要部分:

#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>
@interface VideoView :UIView{
@private
__block AVPlayer *player;
}
...

是否有任何解释为什么 g++ 认为我在非变量对象上应用 __block 属性?

最佳答案

您不能在实例变量上使用 __block,因为它完全没有必要。

即,当您这样做时:

^{
someIvar = ....;
}();

该 block 正在捕获一个不可变的、保留的、对 self 的引用,并通过它间接引用 iVar,因此,__block 什么都不做,因为该变量既不是 const -复制也不是只读的。

顺便说一句,这也是为什么在 ARC 下,您在使用 iVar 时可能会收到“循环引用”警告。

注意:在定义 block 语法时,我们试图想出一种语法来表示这一点微妙之处,但决定,除非有任何明显的(实际上没有),改进的内存管理对 ARC 环境和/或 LLVM 静态分析器的分析使其变得没有必要。

关于objective-c - __block 实例变量问题上的属性。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10565431/

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