我正在尝试使网络调用在后台线程中运行,以便它在等待时不会冻结我的应用程序。
通话发生在我执行以下操作时:
nextTime = [myObj getNextTime];
我一收到NSLog,就可以了。
但是,当我不在调度块之外时,
NSLog打印出空值。
myObj *current = ((myObj *)sortedArray[i]);
__block NSString *nextTime;
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0ul);
dispatch_async(queue, ^{
nextTime = [myObj getNextTime];
NSLog(@"inside%@",nextTime);
dispatch_sync(dispatch_get_main_queue(), ^{
});
});
NSLog(@"outside%@",nextTime);
任何想法,为什么外部日志打印为空?我是在做些可怕的错误,而我只是错过了吗?谢谢!
最佳答案
那是因为您将其设置在一个异步块中,并且异步块会立即返回。如果查看两个日志的时间戳,您会看到外部日志实际上是在内部日志和变量设置之前发布的。
从dispatch_async()
上的GCD docs: