Ich habe eine Situation wie folgt aus:Objective-C: Sind Blöcke innerhalb von Methoden stark oder schwach definiert?
- (void)someMethod
{
__weak typeof(self) weakSelf = self;
void (^myBlock1)(void) = ^{
// ... do stuff
};
void (^myBlock2)(void) = ^{
[weakSelf doSomeHeavyNetworkCall2:^{
myBlock1();
}];
};
[self doSomeHeavyNetworkCall1:^{
myBlock2();
}];
}
Was ist der Lebenszyklus von myBlock1 und myBlock2 in diesem Fall? Soll ich so nach Nil suchen?
void (^myBlock2)(void) = ^{
[weakSelf doSomeHeavyNetworkCall2:^{
if (myBlock1) {
myBlock1();
}
}];
};
[self doSomeHeavyNetworkCall1:^{
if (myBlock2) {
myBlock2();
}
}];
Auch wenn ich die gesamte someMethod
in @synchronized
wickeln, bin ich garantiert rund um die Blöcke haben?
Zum Umpacken von 'someMethod' in' @ synchronized', beachten Sie, dass diese Blöcke nicht synchronisiert werden, wenn diese Blöcke asynchron ausgeführt werden. Die Direktive '@ synchronized' betrifft nur das, was synchron läuft. Wenn Sie die Callbacks synchronisieren möchten, müssen Sie '@ synchronized' Direktiven _inside_ die Blöcke einfügen und nicht' someMethod'. – Rob