【发布时间】:2013-07-31 09:45:20
【问题描述】:
如何在不同线程的后台执行某些操作,如果它在主线程上执行,它会阻塞我的应用程序的 UI。有人知道怎么做吗?
即使它在后台打印 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 秒打印 1 到 100 的整数。
【问题讨论】:
-
您的 for () {} 正在主队列中执行。而你使用 [NSThread sleepForTimeInterval:1],它不会阻塞你的 UI 吗?您停止了主队列。
-
已编辑并包含更多详细信息,我尝试在不同线程上执行第二种方法,但按下主页按钮时它会停止后台任务。
-
为什么不直接使用计时器。你甚至不需要把它放在后台线程上。
-
正如我在下面所说的,我认为他的意思不是打印数字 1 到 100,这可能只是一些“线程的 helloWorld”,看看它是否有效。
标签: ios background-process nsthread