我正在使用以下代码更改 View Controller 内名为 topPlaces
的属性。 [FlickrFetcher topPlaces]
行返回一个 NSArray
而我的属性 topPlaces
当然也是一个 NSArray。
dispatch_queue_t downloadQueue = dispatch_queue_create("flickr topPlace", NULL);
dispatch_async(downloadQueue, ^{
NSArray *topPlaces = [FlickrFetcher topPlaces];
dispatch_async(dispatch_get_main_queue(), ^{
self.topPlaces = topPlaces;
});
});
dispatch_release(downloadQueue);
但是,在 block 执行完毕后,如果我记录 self.topPlaces
的值,出于某种原因它仍然是 NULL。有什么我想念的吗?
最佳答案
在当前方法完成之前,您的 ivar 不会被设置。您对 [FlickrFetcher topPlaces]
的调用与您当前的方法并行运行,并且需要随机的时间来完成。完成后,它会回调主线程,在运行循环的下一次迭代中执行
这意味着在您的第二个 dispatch_async()
block 中,您需要在设置 ivar 后调用任何方法来显示数据。
关于ios - 在 dispatch_async 中设置属性,但 block 完成后属性为 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16660727/