当我按下按钮时,我正在尝试运行while循环,但我无法按下按钮,因为while循环阻止了UI。
是否有后台线程,我可以运行while循环并推送UIButton
?
答案 0 :(得分:24)
就个人而言,我会在UI的顶部运行一个HUD活动指示器,然后在后台运行你的循环。
//Start the HUD here
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//Run your loop here
dispatch_async(dispatch_get_main_queue(), ^(void) {
//stop your HUD here
//This is run on the main thread
});
});
答案 1 :(得分:2)
试试这个
dispatch_async(dispatch_get_main_queue(), ^{
// your code
});
一旦发送,您将无法完全控制操作。 如果要控制操作。使用
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[queue addOperationWithBlock:^{
// Background work
}];
答案 2 :(得分:1)
方式1:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// Write your code here
});
方式2:
如果使用performSelectorInBackground:withObject:
生成新线程。
方式3:
[NSThread detachNewThreadSelector:@selector(yourMethod:) toTarget:self withObject:nil];
答案 3 :(得分:0)
有很多选择,Grand Central Despatch是一个不错的选择,或者您可以使用NSTimer每隔x毫秒在后台触发一个事件,这也可能适合您。
dispatch_async(dispatch_get_main_queue(), ^{
// your code
});
或
NSTimer *refreshTimer;
refreshTimer = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(YourMethodHere) userInfo:nil repeats:YES];
答案 4 :(得分:0)
您可以使用dispatch_async来实现此目的。您必须在后台线程中运行循环,而UI更新必须在主线程中完成。这是link