如何在Objective-C中使用后台线程?

时间:2014-12-09 09:13:41

标签: ios objective-c multithreading

当我按下按钮时,我正在尝试运行while循环,但我无法按下按钮,因为while循环阻止了UI。

是否有后台线程,我可以运行while循环并推送UIButton

5 个答案:

答案 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