【问题标题】:Understanding Multithreading in iOS了解 iOS 中的多线程
【发布时间】:2012-10-18 22:04:47
【问题描述】:

我正在尝试更详细地了解 iOS 上的多线程。我浏览了一些类引用,例如NSThreadNSRunLoopNSTask..

首先如以下链接所示: use of runloop

RunloopThread 内运行。

那么为什么我们需要在我们的应用程序中定义自己的Runloop?在NSThread 的情况下,它很有用,因为一些耗时的进程可以在单独的线程中运行,这样应用程序仍然可以在主线程上响应。

【问题讨论】:

  • 这个问题非常广泛。您真正希望您的应用程序完成什么?你会重写你的帖子来问一个具体的问题吗?
  • 具体一点,问题是为什么要定义自己的Runloop?
  • @shebelaw 感谢您提出这个问题

标签: ios multithreading nsthread nstask nsrunloop


【解决方案1】:

如果您有一个线程希望定期继续其工作,那么与线程的运行循环交互可能会很有用。也就是说,一个运行循环会做一些工作,然后当它完成该工作时,它会让线程休息一段时间,然后在稍后恢复工作——有效地防止线程退出。您不需要与它们交互或定期自己配置/创建它们(如果您使用的是高级抽象,例如 Foundation,则只有一小部分应用程序符合条件,因为 Foundation 在大多数情况下会代表您设置它们)。

如果您的辅助线程只是执行指定的任务并且不需要需要等待一些外部事件(例如下载完成),那么您(通常)不需要与运行循环交互.

【讨论】:

  • 谢谢;这是关于使用定义我们自己的 RunLoops 的更好的解释。这就是我所怀疑的,如果我有自己的线程并且如果我没有在该线程中定义 RunLoop,那么线程在完成任务后就会退出,但如果我希望它挂起并且可能是其他一些任务会来的,我需要在其中定义一个 RunLoop。
  • @justin 真的很棒的解释。谢谢:)
【解决方案2】:

您可以考虑改用NSOperationQueuesNSOperationsNSBlockOperations,因为它们会自行管理,允许取消任务,并且可以安排在主线程和后台线程上。

【讨论】:

  • 谢谢 Thuggish,我会检查这些,但我仍然没有看到定义我们自己的 RunLoop 的意义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-16
  • 1970-01-01
  • 2021-12-04
  • 1970-01-01
  • 1970-01-01
  • 2016-12-08
  • 1970-01-01
相关资源
最近更新 更多