3

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;   
}
...

非変数オブジェクトに __block 属性を適用していると g++ が考える理由はありますか?

4

1 に答える 1

13

__blockまったく不要なため、インスタンス変数を使用することはできません。

つまり、次の場合:

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

ブロックは、selfそれを介して間接的にiVarへの不変で保持された参照と参照をキャプチャしているため__block、変数がconst-copyもreadonlyでもないため、何もしません。

ちなみに、ARC の下で iVar を使用すると「循環参照」の警告が表示されるのもこのためです。

注:ブロックの構文を定義する際に、この微妙な点を示すための構文を考えようとしましたが、明確なもの (存在しなかったもの) を除いて、ARC 環境および/または LLVM の改善されたメモリ管理分析によって決定されました。静的アナライザーはそれを不要にしました。

于 2012-05-12T18:23:27.713 に答える