Ios 如何在Objective-C中使用背景线程?

Ios 如何在Objective-C中使用背景线程?,ios,objective-c,multithreading,Ios,Objective C,Multithreading,我尝试运行while循环时 按下按钮,但我无法按下按钮,因为while循环会阻塞UI 是否有后台线程可以运行while循环并按下ui按钮??试试这个 dispatch_async(dispatch_get_main_queue(), ^{ // your code }); 一旦它发出,您将无法完全控制操作。 如果你想控制操作。使用 NSOperationQueue *queue = [[NSOperationQueue alloc] init]; [queue addOperationWit

我尝试运行while循环时 按下按钮,但我无法按下按钮,因为while循环会阻塞UI

是否有后台线程可以运行while循环并按下
ui按钮?

试试这个

dispatch_async(dispatch_get_main_queue(), ^{
//  your code
});
一旦它发出,您将无法完全控制操作。 如果你想控制操作。使用

NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[queue addOperationWithBlock:^{

   // Background work
}];

您有很多选择,Grand Central Dispatch是一个不错的选择,或者您可以使用NSTimer每隔x毫秒在后台触发一个事件,这也可能对您有用

dispatch_async(dispatch_get_main_queue(), ^{
//  your code
});


就个人而言,我会在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


    });
});

为此,您可以使用dispatch_async。您必须在后台线程中运行循环,而UI更新必须在主线程中完成。下面是一个方法1:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// Write your code here 
});
[NSThread detachNewThreadSelector:@selector(yourMethod:) toTarget:self withObject:nil];
方式2:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// Write your code here 
});
[NSThread detachNewThreadSelector:@selector(yourMethod:) toTarget:self withObject:nil];
如果使用
performSelectorInBackground:withObject:
生成新线程

方式3:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// Write your code here 
});
[NSThread detachNewThreadSelector:@selector(yourMethod:) toTarget:self withObject:nil];

查看此页面:还可以阅读关于如果我使用
dispatch\u async
启动后台工作,如何结束此工作?一旦它在队列中调度,您将无法控制您的代码。把你的while循环放进去。如果我用dispatch_async开始后台工作,我该如何结束这项工作?@Martin:你必须使用“合作取消”:声明你可以从外部更改为“你应该停止工作”和块内定期检查该状态的代码。如果您添加NSOperation用法,并包含在每个方法的主线程和后台线程之间移动的重要概念,这将是一个更好的答案。