基本上下面的代碼的工作原理如下,當我按下按鈕時,它會導致兩個標籤在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