ios - 在 dispatch_async 中设置属性,但 block 完成后属性为 NULL

标签 ios objective-c grand-central-dispatch

我正在使用以下代码更改 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/

相关文章:

ios - 关于委托(delegate)协议(protocol)的困惑

ios - 关于使这个线程安全但高效的建议?

objective-c - CocoaLumberjack 未登录 iOS 中的后台线程

ios - 重新加载 TableView 不显示所有对象

iPhone 应用程序 : Sync Google Calendar

ios - Jenkins 将 xcode 应用程序版本更新为 Hockeyapp

objective-c - 实例变量在 UINavigationController 的 ViewController 中不起作用

ios - iPhone Facebook Api Friends.getLists 什么都不返回

swift - 如何使用 dispatchQueue 创建引用循环?

ios - 用户按下按钮时弹出日历