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)

results matching ""

    No results matching ""