如何在不同線程的後臺執行某些操作,如果它在主線程上執行,它將阻止我的應用程序的UI。任何人有任何想法如何做到這一點?在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秒的時間間隔。
Your for(){}在主隊列中執行。你使用[NSThread sleepForTimeInterval:1],是不是會阻止你的用戶界面?你阻止你主隊列。 –
編輯幷包含更多細節,我試圖執行第二種方法在不同的線程上執行,但當主頁按鈕被按下時,它停止後臺任務。 –
爲什麼不使用計時器。你甚至不需要把它放在後臺線程上。 – Abizern