Ну, чтобы сделать это с потоками, я обычно делю вещи на 3 секции:
- start.
- processing.
- finish.
И это выглядит так:
-(void)start:(id)sender{
//prepare everything and anything
[NSThread detachNewThreadSelector:@selector(processing:) toTarget:self withObject:nil];
}
-(void)processing:(id)sender{
//Perform all your calculations, you can't modify UI elements here
[self performSelectorOnMainThread:@selector(finish:) withObject:nil waitUntilDone:NO];
}
-(void)finish:(id)sender{
//Wrap everything up and do any modifications to the UI
}
Теперь, чтобы отменить это, вы можете добавить, возможно, использовать:
Отменяет выполнение запросов, ранее зарегистрированных в executeSelector:withObject: afterDelay:.
+ (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget selector:(SEL)aSelector object:(id)anArgument