Objective-C 冻结的 GUI 也有队列
Objective-C freezed GUI also with queue
我正在尝试了解 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 不会冻结,因为睡眠在 coda_thread(而不是在更新 GUI 的主队列)队列中,而 setProgress 在主队列中。相反,我在我的 GUI 中冻结..为什么这个?
问题是调度队列不是新线程。您无法保证调度队列实际上正在使用不同的线程。将 GCD API 与线程 API 结合使用是行不通的。
我正在尝试了解 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 不会冻结,因为睡眠在 coda_thread(而不是在更新 GUI 的主队列)队列中,而 setProgress 在主队列中。相反,我在我的 GUI 中冻结..为什么这个?
问题是调度队列不是新线程。您无法保证调度队列实际上正在使用不同的线程。将 GCD API 与线程 API 结合使用是行不通的。