有什么指导iOS的runloop机制?

我正在学习iPhone上的套接字通信,其指南中提到了有关CFRunloop一些信息(这是CFNetwork的指南,可以在iOS上使用吗?)我可以在哪里了解iOS上的runloop?API引用是不够的。

请看Apple的“ 线程编程指南 ”的“运行循环”章节 简单来说:

  • 有一个运行循环与每个线程相关联。
  • 运行循环必须运行来做任何事情。 苹果的应用程序主要function为您在主线程上照顾这个。
  • 运行循环以特定模式运行。 “通用模式”实际上是一组模式,并且有一个用于向该组添加模式的API。
  • 运行循环的主要目的是监视定时器和运行循环源。 每个源都针对特定模式的特定运行循环进行注册,并且仅在runloop在该模式下运行的适当时间进行检查。
  • 运行循环在其循环中经过几个阶段,例如检查定时器和检查其他事件源。 如果发现任何来源已准备好触发,则触发适当的callback。
  • 除了使用现成的运行循环工具外,还可以创build自己的运行循环源以及注册运行循环观察程序来跟踪运行循环的进度。

一个主要的缺陷是忘记运行循环,同时等待来自runloop源的callback。 当您决定忙于等待主线程发生某些事情时,这有时会成为问题,但是当您创build自己的线程并使用该runloop注册runloop源代码时,最有可能遇到这种情况。 你有责任build立一个自动释放池,并在非主线程上运行runloop,因为应用程序的主要function不会在那里为你做。

你应该更好地阅读Apple的“ 并发编程指南” ,它build议替代runloop机制,比如操作队列和调度源。 “从线程迁移”一章中的“replace运行循环代码”部分build议使用调度源代替runloop源来处理事件。

看看苹果文档中的这些文章:

主要事件循环

运行循环

有关如何通过运行循环运行asynchronous连接的示例代码:

SimpleURLConnections (虽然这个使用NSURLConnection API)

NSRunLoop是一个Event-Driven-Mode (android Handler-Looper-MessageQueue循环器Handler-Looper-MessageQueuememcached等)

我们使用pipe()生成两个fd(一个用于read ,另一个用于write )。 我们可以通过写一些字节来唤醒线程(谁读取read fd)在其他线程中write fd。

这个项目(我的赞助商)可以给你更多的信息。

https://github.com/wuyunfeng/LightWeightRunLoop

我相信这个项目可以帮助你清楚而充分地理解iOS / Mas Runloop,所以你可以正确有效地使用runloop来devise你的项目。

希望这可以帮到你。