下载此文档

北京iOS培训课程浅谈RunLoop.docx


文档分类:行业资料 | 页数:约6页 举报非法文档有奖
1/6
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/6 下载此文档
文档列表 文档介绍
北京iOS培训课程浅谈RunLoop
我会从几个方面阐述 Ru nLoop:
RunLoop的概念
RunLoop与线程的关系
苹果用Run Loop实现的功能
请大家跟随我一起开始了解 Ru nLoop。
RunLoop的概念
一般来讲,一个线程一次只能执行一个任务, 执行完成后线程就会退出。 如果我们需要
一个机制,让线程能随时处理事件但并不退出,通常的代码逻辑是这样的:
Crayon Syn tax Highlighter function loop() {
in itialize();
do {
var message = get_ next_message();
process_message(message);
} while (message != quit);
function loop (){
in itialize ();
do{
var message = get_next_message ();
process_message (message);
} while (message != quit );
}
这种模型通常被称作 Eve nt Loop 。 Event Loop 在很多系统和框架里都有实现,比如
的事件处理,比如 Windows程序的消息循环, 再比如OSX/iOS里的RunLoop。实现 这种模型的关键点在于:如何管理事件 /消息,如何让线程在没有处理消息时休眠以避免资
源占用、在有消息到来时立刻被唤醒。
所以,Ru nLoop实际上就是一个对象,这个对象管理了其需要处理的事件和消息,并提 供了一个入口函数来执行上面 Event Loop的逻辑。线程执行了这个函数后,就会一直处于
这个函数内部”接受消息-> 等待-> 处理”的循环中,直到这个循环结束 (比如传入quit 的 消息),函数返回。
OSX/iOS系统中,提供了两个这样的对象: NSR un Loo和CFRu nLoopRef^
CFRunLoopRe是在CoreFoundation框架内的,它提供了纯 C函数的API,所有这些API 都是线程安全的。
NSRunLoo是基于CFRunLoopRef的封装,提供了面向对象的 API,但是这些API不是线 程安全的。
RunLoop与线程的关系
首先,iOS开发中能遇到两个线程对象:pthread_t和NSThread。过去苹果有份文档标明 了 NSThread只是pthread_t的封装,但那份文档已经失效了,现在它们也有可能都是直接包 装自最底层的mach thread。苹果并没有提供这两个对象相互转换的接口,但不管怎么样, 可以肯定的是pthread_t和NSThread是一一对应的。比如,你可以通过 pthread_main_thread_np() 或
[NSThreadmainThread] 来获取主线程;也可 以通过 pthread_self() 或[NSThreadcurrentThread] 来获取当前线程。CFRunLoo是基于 pthread 来管理的。
苹果不允许直接创建 Run Loop,它只提供了两个自动获取的函数: CFRu nLoopGetMai n()
和CFR

北京iOS培训课程浅谈RunLoop 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息