私はブロックに不慣れです。私はシングルトンの中にいて、これを行います
void (^ myBlock)() = ^(){ [self doStuff]; };
宣言されていない識別子selfのこのエラー使用を受け取ります。
doStuffは、シングルトン内のメソッドです。
ただし、このブロックが別のメソッド内で宣言されている場合、Xcodeは問題ありません。
何故ですか?ありがとう。
インターフェイスでブロックを定義し、次のように@implementationファイルの任意のメソッド(初期化子を含む)で初期化できます。
@interface YourClass {
void (^ myBlock)();
}
@implementation YourClass
- (void)yourMethod {
myBlock = ^(){ [self doStuff]; };
}
@end
self
ブロック内で直接呼び出すべきではありません。
むしろself
、ブロック内から安全なブロックポインタを作成してアクセスする必要があります。
__block id safeBlockSelf = self;
void (^ myBlock)() = ^(){ [safeBlockSelf doSomething]; };
APIを実装するときにブロックに自分自身をキャプチャしないようにするにはどうすればよいですか?を参照してください。詳細については。
すべてのメソッドが非表示のパラメータとして自分自身を渡すためです。selfは他の変数と同様に変数であり、メソッド内の場合、ブロックは「それを表示/キャプチャ」できます
それがメソッドにない場合、selfはどこにも設定された変数ではなく、ブロックは「それを見る」ことができません