ブロックを取るこのメソッドがありますが、そのブロックは常に呼び出されるとは限りません。メソッドを参照してください。
- (void)updateWithCompletion:(void (^)(void))completion {
[MYObject myMethodWithCompletion:^(NSArray *array, NSError *error) {
if (error) {
NSLog(@"%s, ERROR not nil", __FUNCTION__);
completion();
return;
}
NSLog(@"%s, calling completion %d", __FUNCTION__, &completion);
completion();
NSLog(@"%s, finished completion", __FUNCTION__);
}];
}
補完内にさらにいくつかの NSLogs があります。時々、このプログラム カウンターは、上記のコードの completion() への呼び出しを通り越して吹き飛ばされます。呼び出し元のコードは常にコードのリテラル ブロックを入力として渡すため、これがなぜなのかわかりません。
addressof 演算子を含む行の出力に興味がある場合、それは常に異なるものですが、決して 0 または nil ではありません。
完了が実行されない原因は何ですか?