В основном приведенный ниже код работает следующим образом: когда я нажимаю кнопку, обе метки обновляются через 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!" ); } );
}
->
для доступа к ivars работает, но не является стандартным соглашением. Просто используйте их напрямую. - person bbum   schedule 22.09.2013