[关闭]
@chenbinghua 2015-09-12T10:32:11.000000Z 字数 768 阅读 1580

iOS开发之RunLoop实践

iOS笔记


常驻线程

开启子线程,在子线程中开启runloop,注意要在runloop中加入source,timer,observer三者之一,否则runloop直接退出

RunLoop面试题

什么是RunLoop?

从字面意思看:运行循环、跑圈
其实它内部就是do-while循环,在这个循环内部不断地处理各种任务(比如Source、Timer、Observer),当runloop没有接受到各种任务时,它就会进入休眠状态,等它接受到事件时就会唤醒处理事件。
一个线程对应一个RunLoop,主线程的RunLoop默认已经启动,子线程的RunLoop得手动启动(调用run方法)
RunLoop只能选择一个Mode启动,如果当前Mode中没有任何Source(Sources0、Sources1)、Timer,那么就直接退出RunLoop。如果需要切换Mode,只能退出Loop,再重新指定一个Mode进入。

自动释放池什么时候释放?

通过Observer监听RunLoop的状态,一旦监听到RunLoop即将进入睡眠等待状态,就释放自动释放池(kCFRunLoopBeforeWaiting)

在开发中如何使用RunLoop?什么应用场景?

开启一个常驻线程(让一个子线程不进入消亡状态,等待其他线程发来消息,处理其他事件)
在子线程中开启一个定时器
在子线程中进行一些长期监控

可以控制定时器在特定模式下执行

可以让某些事件(行为、任务)在特定模式下执行

可以添加Observer监听RunLoop的状态,比如监听点击事件的处理(在所有点击事件之前做一些事情)

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注