1

基本上,下面的代码如下工作,当我按下按钮时,它会导致两个标签在 4 秒内同时更新其受尊重的文本。但是,如果我注释掉 dispatch_async(dispatch_get_main_queue(), ^(void){ 我的标签仍然会更新,但第一个标签需要 4 秒,然后第二个标签在第一个标签后 4 秒更新。我想知道是否有人可以解释原因两个标签都在 4 秒内更新,调度代码可以这么说。我试着听教程解释,但它让我更加困惑。

void (^tFunct1)(UILabel *,NSString*) = ^(UILabel *lbl, NSString *src){
 NSLog(@"GO TO SLEEP...");
 sleep(4);
 NSLog(@"WAKING UP...");
dispatch_async(dispatch_get_main_queue(), ^(void){
[lbl setText:src];
NSLog(@"Label Done!");
});

};
 -(IBAction)buttonPressed:(id)sender{
aConCurrentQue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);
dispatch_async(aConCurrentQue ,^{ tFunct1(self ->lblOne, @"1 GO!" ); } );
dispatch_async(aConCurrentQue ,^{ tFunct1(self ->lblTwo, @"2 GO!" ); } );
 }
4

1 回答 1

0

您始终必须在主队列上进行 UI 更新。通过注释掉对主队列的调度,您尝试在后台全局队列上进行 UI 更新,这解释了不正确的行为。

UIKit 不是为在后台队列上工作而设计的(除了一些非常具体的例外),您根本不应该在后台队列上更新 UI。

于 2013-09-22T14:34:22.663 回答