我是iOS开发的新手,我正在学习一些在线教程,最新的是块和多线程。示例应用程序从Flickr中提取照片,用户可以分别浏览和使用表视图控制器和滚动视图进行查看。
问题是没有多线程,照片是从Flickr获得并正确加载的,尽管这都是在主线程中完成的。我完全按照教练的说法添加了三行看似简单的代码。他的应用程序在演示中正常运行,我的运行但现在似乎跳过调度到新线程的代码。没有图片加载。这是代码:
- (void)loadPhotos
{
[self.refreshControl beginRefreshing];
dispatch_queue_t loaderQ = dispatch_queue_create("newphotos", NULL);
dispatch_async(loaderQ, ^{
NSArray *newPhotos = [FlickrFetcher getPhotos];
dispatch_async(dispatch_get_main_queue(), ^{
self.photos = newPhotos;
[self.refreshControl endRefreshing];
});
});
}
如果我注释掉3个“dispatch”行以及关闭块的两行,则代码运行并加载图片。如上所示,代码运行但没有获取图片。调试器似乎跳过了块中的代码,所以我不相信这一行:
NSArray *newPhotos = [FlickrFetcher getPhotos];
实际上是跑了。
我做错了什么?
答案 0 :(得分:0)
你的dispatch_queue在有机会执行之前就会被释放。您应该抓住它并在完成时使用dispatch_release
将其释放。