基本上下面的代码的工作原理如下,当我按下按钮时,它会导致两个标签在4秒内同时更新其受尊重的文本。然而,如果我注释掉dispatch_async(dispatch_get_main_queue(),^(void){我的标签仍然更新,但它将采用第一个标签4秒,然后第二个标签在第一个标签后4秒更新,我想知道是否有人可以解释为什么这两个标签更新在4秒与调度代码在一个愚蠢的事情倒可以这么说。我试着听听教程说明,但它只是让我感到困惑,甚至更多。Objective -c:在下面的代码中需要一些关于dispatch_async(GCD)的说明
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!"); });
}
似乎很奇怪使用块来调用块内的块。只需使用一种方法。此外,使用' - >'来访问ivars可行,但不是标准约定。只需直接使用他们。 – bbum