Objective-C冻结GUI也带队列

时间:2015-10-02 15:27:41

标签: objective-c multithreading user-interface grand-central-dispatch dispatch-async

我正在尝试了解iOS中的队列;使用此代码

dispatch_queue_t coda_thread=dispatch_queue_create("coda_thread",NULL);

//UIPROGRESS VIEW
for(i=0;i<=10;i=i+1)
{    
dispatch_async(coda_thread,
    ^{
        NSLog(@"CODA_THREAD");
        NSLog(@"attendo..");
        [NSThread sleepForTimeInterval:10];
        dispatch_async(dispatch_get_main_queue(),
        ^{
            NSLog(@"MAIN THREAD");
            NSLog(@"aggiorno barra.."); 
            [self.upv setProgress:i/10 animated:YES];

        });
    });

}  

我预计GUI中没有冻结,因为睡眠是在主队列中的setProgress中的coda_thread(而不是在更新GUI的主队列中)队列。而是我冻结了我的GUI ..为什么?

1 个答案:

答案 0 :(得分:2)

问题是调度队列不是新线程。您无法保证调度队列实际上使用的是其他线程。将GCD API与线程API结合使用将无法正常工作。