Как преформировать определенную операцию в фоновом режиме на другой поток, если она выполняется в основном потоке, она блокирует пользовательский интерфейс моего приложения. кто-нибудь знает, как это сделать?Выполнение фоновой задачи в разных потоках в iOS
, даже если он печатает NSLog в фоновом режиме, все будет хорошо. Я хочу запустить следующую вещь, даже если пользователь нажимает кнопку HOME. в моем ViewController я сделал это:
- (IBAction)btnStartClicked:(UIButton *)sender {
[NSThread detachNewThreadSelector:@selector(StartBGTask) toTarget:self withObject:nil];
}
-(void)StartBGTask{
[[[UIApplication sharedApplication] delegate] performSelector:@selector(startThread)];
}
и appDelegate.m у меня есть этот метод
-(void) startThread {
@autoreleasepool {
for (int i = 0; i < 100; i++) {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSLog(@"current progress %d", i);
});
[NSThread sleepForTimeInterval:1];
}
}
}
печатает целое число от 1 до 100 на интервале 1 сек.
Ваш вызов for() {} выполняется в главной очереди. И вы используете [NSThread sleepForTimeInterval: 1], разве он не блокирует ваш интерфейс? Вы останавливаете основную очередь. –
Отредактировано и включено более подробную информацию, я попытался выполнить выполнение второго метода в другом потоке, но он останавливает фоновые задачи при нажатии кнопки дома. –
Почему бы просто не использовать таймер. Вам даже не нужно помещать это в фоновый поток. – Abizern