Objective-C中的长时间运行任务

时间:2012-07-21 18:48:07

标签: ios multithreading

我正试图弄清楚如何在Objective-C(iOS)中以不会挂起UI线程的方式执行日志运行任务,有点像后台工作者或.Net中的TPL。

我正在寻找一种以可维护的方式处理此类工作的方法,这被认为是iOS开发的最佳实践?

2 个答案:

答案 0 :(得分:2)

有很多方法可以做到这一点,例如NSThreadNSOperation / NSOperationQueue类或GCD。示例代码(GCD):

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    //background work
});

您可以在此处阅读:Concurrency Programming Guide

答案 1 :(得分:1)

对于GCD,请尝试此测试:(另请参阅Apple的文档,Adam和Martin R建议。

- (IBAction)dispatchQPressed:(id)sender 
{
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        for (int i=0; i<1000; i++)
        {
            NSLog(@"Running in background thread concurrently: %i", i);
        }
    });

    for (int i = 0; i<200; i++)
    {
        NSLog(@"run in main thread:%i", i);
    }
}