【问题标题】:How to notify the background thread from the main thread when there is something needs to be processed有事需要处理时如何从主线程通知后台线程
【发布时间】:2012-09-12 06:33:57
【问题描述】:

我正在开发一个执行图像处理并显示结果图像的应用程序。我使用 UIScrollView 让用户滚动所有图像,因为图像不是标准的 jpg 或 png,加载需要时间。所以我想使用线程加载图像,然后更新视图。

目前,我在后台线程中使用计时器来检查是否有需要加载的图像。但它运行得不太好。我想知道当有一些图像需要在主线程中加载或任何其他建议时,是否有办法通知后台线程?

提前致谢。

【问题讨论】:

  • 如果你从网上加载一些东西,你通常使用的类有回调块或委托之类的东西。下载完成时将调用块/委托
  • @Pfitz 是的,有些图片是从 Internet 下载的。但我先下载所有图片。然后当用户滚动时,我会根据其索引加载一些要显示的图像。

标签: iphone ios nsthread runloop


【解决方案1】:

在你的类中提供一个控制scrollView的方法,让我们调用'processImage'。在您的后台线程中,当您有图像时,将其发送到 UI 类,如下所示:

dispatch_async(dispatch_get_main_queue(), ^{ [uiClass processImage:theImage] } );

背景对象应该保持对 uiClass 的弱引用(在这个例子中是一个委托)。这个想法是在后台进行图像处理,但将其提供给主线程上的 UI 类。

【讨论】:

  • 感谢您的建议。 GCD 是一个很棒的机制。我正在尝试使用这种机制来完成这项工作。性能比以前更好。
猜你喜欢
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多