В настоящее время я работаю в предположении, что -performSelector:withObject:afterDelay:
не использует потоки, но расписывает событие, которое будет запущено позднее в текущем потоке. Правильно ли это?
Подробнее, в частности:
- (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;
}
Гарантируется ли, что -resetIsBad
не будет вызываться до тех пор, пока не вернется -methodCalledByButtonClick
, если мы будем работать в основном потоке, даже если -methodCalledByButtonClick
занимает сколь угодно длительное время для завершения?