Rea*_*son 4 iphone objective-c ios
在我的应用程序中,我正在与远程服务器进行一些通信,因为这可能很慢,我认为以异步方式运行该代码是个好主意.我将通信代码放在一个块中,然后传递给dispatch_async.此代码执行通信,并在完成后设置标签的文本.最后一部分是问题所在.文本已设置,但会在延迟几秒后发生.这是我的代码.
- (void)doNetworkingTask {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// Slow network task goes here.
// Slow network task done, notify the user.
[self.myLabel setText:@"task done."];
NSLog(@"task done.");
});
}
Run Code Online (Sandbox Code Playgroud)
这里发生的是我的网络任务完成,NSLog文本被记录,几秒钟后,标签的文本被更新.我的问题是1)为什么标签文字不会立即更新?2)做我想做的事的正确方法是什么?(执行慢速网络任务而不阻止任何其他任务,一旦完成,就通过文本标签更新用户.)
UI更新必须位于主线程上.将代码更新为以下内容:
- (void)doNetworkingTask {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// Slow network task goes here.
// Slow network task done, notify the user.
dispatch_async(dispatch_get_main_queue(), ^{
[self.myLabel setText:@"task done."];
});
NSLog(@"task done.");
});
}
Run Code Online (Sandbox Code Playgroud)