Runloop
Rounloop: 其实内部就是一个 do-while 的运行循环
基本作用:
- 保持程序的持续运行
- 处理 APP 的各种事件
- 节省 CPU 资源,提高程序性能,
RunLoop与线程的关系:
- 每条线程都有唯一的一个与之对应的 RunLoop 对象
- 主线程的 RunLoop 已经自动创建好了,子线程的 RunLoop 需要主动创建
- RunLoop 在第一次获取时创建,在线程结束时销毁
获取 Runloop 对象
Foundation
- [NSRunLoopcurrentRunLoop];//获得当前线程的RunLoop对象
- [NSRunLoopmainRunLoop];//获得主线程的RunLoop对象
CoreFoundation
- CFRunLoopGetCurrent();//获得当前线程的RunLoop对象
- CFRunLoopGetMain();//获得主线程的RunLoop对象
Core Foundation中关于RunLoop的5个类
CFRunLoopRef
CFRunLoopModeRef
CFRunLoopSourceRef
CFRunLoopTimerRef
CFRunLoopObserverRef
一个RunLoop包含若干个Mode,每个Mode又包含若干个Source/Timer/Observer,每次RunLoop启动时,只能指定其中一个Mode,这个Mode被称作CurrentMode
自动释放池什么时候释放?
通过Observer监听RunLoop的状态,一旦监听到RunLoop即将进入睡眠等待状态,就释放自动释放池(kCFRunLoopBeforeWaiting)