实例变量问题的__block属性.

Kos*_*s.N 3 objective-c ios objective-c-blocks

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

VideoView.h:7: error: __block attribute can be specified on variables only
Run Code Online (Sandbox Code Playgroud)

这里也是头文件的重要部分:

#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>
@interface VideoView :UIView{
@private
    __block AVPlayer *player;   
}
...
Run Code Online (Sandbox Code Playgroud)

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

bbu*_*bum 13

您不能拥有__block实例变量,因为它完全没有必要.

即,当你这样做时:

^{
     someIvar = ....;
 }();
Run Code Online (Sandbox Code Playgroud)

该块self通过它间接捕获对iVar 的不可变,保留,引用和引用,因此,__block不执行任何操作,因为该变量既不是const复制也不是readonly.

顺便说一下,这也是为什么在ARC下使用iVar时最终会出现"循环引用"警告的原因.

注意:在定义块语法时,我们试图想出一种表示这一点微妙的语法,但是决定,除非有任何明显的(没有),否则ARC环境和/或LLVM的改进的内存管理分析静态分析仪使它不必要.