私はこのような状況がある:Objective-C:メソッドの内部で定義されたブロックは強弱ですか?
- (void)someMethod
{
__weak typeof(self) weakSelf = self;
void (^myBlock1)(void) = ^{
// ... do stuff
};
void (^myBlock2)(void) = ^{
[weakSelf doSomeHeavyNetworkCall2:^{
myBlock1();
}];
};
[self doSomeHeavyNetworkCall1:^{
myBlock2();
}];
}
この場合にはmyBlock1とmyBlock2のライフサイクルは何ですか?私はこのような無しをチェックするべきですか?
void (^myBlock2)(void) = ^{
[weakSelf doSomeHeavyNetworkCall2:^{
if (myBlock1) {
myBlock1();
}
}];
};
[self doSomeHeavyNetworkCall1:^{
if (myBlock2) {
myBlock2();
}
}];
また、私は、@synchronized
全体someMethod
を包む私の周りのブロックを持っていることを保証していますか?
'@ synchronized'に' someMethod'をラップして、これらのブロックが非同期で実行されると、それらは同期されないことに注意してください。 '@ synchronized'指示文は、同期して実行される指示にのみ影響します。あなたの意図がコールバックを同期させることであるならば、 'someMethod'をラップしないで、' @ synchronized'ディレクティブをブロック内に置かなければなりません。 – Rob