代码之家  ›  专栏  ›  技术社区  ›  Rits

在单独的线程中做什么?

  •  2
  • Rits  · 技术社区  · 15 年前

    所以我读了一些关于多线程和NSOperation的文章,想知道如何使用它来改进我的应用程序。使用工具,我已经隔离了一些地方,我的应用程序肯定需要提高速度。我的问题是,这些东西是否适合使用NSOperation的另一个线程?

    绘制视图:

    分配和播放音频: AVAudioPlayer 播放背景音乐。当我分配的时候,又有点滞后。

    计算: 我也在做一些计算,和很多整数做一些比较。

    3 回复  |  直到 15 年前
        1
  •  5
  •   coneybeare    15 年前

    UI更新不适用于后台线程。所有UI更新都需要在主线程上完成。如果您的视图花费了太多的时间来呈现,请考虑重构、预重定义和缓存或其他一些优化方法。

    音频代码可以是基于背景的,但不应该那么贵

        2
  •  4
  •   Brad    15 年前

    我同意后台线程不是UI更新的任务。由于用户在等待UI向他们显示正在发生的事情时被“阻止”了(从逻辑的角度看,这是不合理的),并且可能导致其他编码问题。

    这个 最大的 异步的 操作。(想想AJAX网页)。如果希望用户能够与UI交互 发生了什么事。一个很好的例子是从web上检索、更新、获取任何类型的数据。

    即使你在做任何你认为应该做的网络操作 -(就像从一个网站加载一条消息)你很可能想要处理它 异步

    即使你想 同步的 从网络上获取的数据,您可能仍然希望这样做 -因此,您可以在后台线程中加载数据—同时提供进度条、微调器(进度)控件,或允许用户在 前景 用户界面线程。

    将“异步”请求视为需要较长时间的请求,或者 需要多少时间。

        3
  •  3
  •   ccjensen    15 年前

    一些UI绘制方法在iOS 4.0中是线程安全的:

    资料来源: Apple dev: What's new in iOS: iOS 4.0

    在UIKit中绘制图形上下文现在是线程安全的。明确地:

    • 用于访问和操作图形上下文的例程现在可以正确地处理位于不同线程上的上下文。
    • 在多个线程中使用颜色和字体对象现在是安全的。

    我发现我的应用程序通常从后台线程中受益最大:

    • 对数据库的昂贵查询(读/写)

    如果您确实决定后台执行一些任务,我建议您使用NSOperation和NSOperationQueue,因为它们简化了很多事情。有点学习曲线,但绝对值得!