我正在尝试使网络调用在后台线程中运行,以便它在等待时不会冻结我的应用程序。

通话发生在我执行以下操作时:

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:

10-06 13:39