0%

iOS开发者文档译读-RunLoop

一个RunLoop对象可以处理鼠标、键盘输入,端口对象输入,NSConnection对象输入。它也可以处理NSTimer事件。
你的应用不用创建或很清晰地管理RunLoop对象。每个线程(包括应用主线程),都有一个自动创建好的RunLoop对象。如果你需要使用当前线程的RunLoop,你需要使用类方法 currentRunLoop。
应当注意到,从RunLoop角度来看的话,NSTimer对象并不是一个“输入”,它们是一个特殊的类型。这意味着当NSTimer启动时,不会引起RunLoop。
警告:
RunLoop类一般不认为是线程安全的,它的方法应当只被当前线程的上下文调用。你应该永远不要尝试调用其他线程中的RunLoop的方法,因为这样可能导致无法预料的结果。


话题

获取RunLoop和Mode

currentRunLoop

返回当前线程的run loop

currentMode

接受者当前的input mode

- limitDateForMode:

获取下一个响应时间

mainRunLoop

返回主线程的RunLoop

- getCFRunLoop

返回接受者的下属的CFRunLoop对象

NSRunLoopMode

NSRunLoopCommonModes:被添加到这个模式下RunLoop的对象,会被所有mode处在common modes声明中的RunLoop监视。

NSDefaultRunLoopMode:这个模式是用来处理除了NSConnection对象之外的输入源。

NSEventTrackingRunLoopMode:这个模式适用用以下情况:鼠标拖拽循环。

NSModalPanelRunLoopMode:当等待从遮罩层的输入,例如NSSavePanel、NSOpenPanel,一个RunLoop应当被设定为这个mode。

UITrackingRunLoopMode:拖拽时设置为这个mode,你可以用这个模式来添加timer,这样拖拽时timer会继续触发。

管理Timers

- addTimer: forMode:

适用指定的input mode,注册一个给定的timer

管理端口

- addPort: forMode:

添加一个port,作为输入源,添加到指定的mode中

- removePort: forMode:

移除一个port,从指定的mode中

运行一个循环

- run

把接收者放进一个死循环中,在这个循环中,接收者会处理来自与它相连的输入源所输入的一切数据

- runMode: beforeDate:

启动run loop一次,在特定的mode下等待输入,直到给定的时间

- runUntilDate:

启动run loop直到给定的时间,在这期间它会处理相连数据源的数据

- acceptInputForMode: beforeDate:

启动run loop一次,或者直到指定的时间,只接受给定mode的输入

计划发送和取消发送消息

- performSelector: target: argument: order: modes:

计划发送消息

- cancelPerformSelector: target: argument:

取消之前计划发送的消息

- cancelPerformSelectorsWithTarget:

取消指定目标的所有未响应的消息

实例方法

- performBlock:

- performInModes: block: