Je travaille actuellement dans l'hypothèse que -performSelector:withObject:afterDelay:
n'utilise pas de thread, mais planifie un événement pour qu'il se déclenche à une date ultérieure sur le thread actuel. Est-ce correct?
Plus précisement:
- (void) methodCalledByButtonClick {
for (id obj in array) {
[self doSomethingWithObj:obj];
}
}
static BOOL isBad = NO;
- (void) doSomethingWithObj:(id)obj {
if (isBad) {
return;
}
if ([obj isBad]) {
isBad = YES;
[self performSelector:@selector(resetIsBad) withObject:nil afterDelay:0.1];
return;
}
//Do something with obj
}
- (void) resetIsBad {
isBad = NO;
}
Est-il garanti que -resetIsBad
ne sera pas appelé avant le retour de -methodCalledByButtonClick
, en supposant que nous fonctionnons sur le thread principal, même si -methodCalledByButtonClick
prend un temps arbitrairement long pour Achevée?