【问题标题】:NSOperationQueue feels slower than running code on main threadNSOperationQueue 感觉比在主线程上运行代码要慢
【发布时间】:2012-03-10 21:29:07
【问题描述】:

我正在为ios 进行调整(显示来自网络的一些图像)并且我正在尝试使用NSOperationQueue。 首先我在主线程上运行了一些代码来看看它的样子。显示每张图像持续 ±5 秒(UI 冻结)。 然后我尝试使用NSOperationQueue 运行相同的代码,但每个图像持续了 +10 秒(好在 UI 没有冻结)。 有任何想法吗?就这样吗?

【问题讨论】:

  • 如何下载图片?您使用的是 initWithContentsOfURL 还是类似的方法?
  • 我正在这样做:NSURL* url= [NSURL URLWithString:[_HTMLPage substringWithRange:range]]; NSData * imageData = [NSData dataWithContentsOfURL:url]; _image = [UIImage imageWithData:imageData];
  • 当您在主线程上加载所有图像时,集体下载时间约为 5 秒,使用操作队列时集体下载时间约为 10 秒?
  • 我正在加载多个图像,但一次加载 1 个。每次用户触摸按钮时,它都会再加载 1 个,依此类推。但是,是的,从网络获取图像并将其放在主线程上的 uiimageview 上需要 ±5 秒,在 NSOperationQueue 上执行此操作需要 +10 秒
  • (在 OperationQueue 的情况下)您如何更新您的 imageView?下载图片后,您是否调用 performSelectorOnMainThread 来更新 imageView?

标签: iphone ios xcode nsoperationqueue


【解决方案1】:

在 iOS 中,UI 更新发生在主线程上,因此一旦您完成了操作队列,您需要通知主线程更新 UI,但在您的情况下,正如您所说的更新但有延迟。

您需要从操作中调用performSelectorOnMainThread:withObject:waitUntilDone:(最后,在下载数据时),并在此主线程的选择器中执行 UI 更新。

【讨论】:

    猜你喜欢
    • 2022-11-11
    • 2019-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多