Runloop —运行循环

Runloop目的:

1.保住线程的生命

2.负责监听事件:触摸事件,NSTimer,网络

在ViewController里添加一个UITextView和一个计数循环NSTimer:

Runloop —运行循环_第1张图片
Runloop —运行循环_第2张图片

当拖拽UITextView的时候计数NSTimer停止打印,一松开就断续打印,相信大家都有遇到过这样的问题


这个问题的原因就是在于NSRunloop的模式:

/*

Runloop的模式:

NSDefaultRunLoopMode 默认模式

UITrackingRunLoopMode UI模式

NSRunLoopCommonModes 占位模式(拥有默认模式和UI模式 弥补两者的不足)

*/

计数NSTimer是处于默认模式,而UITextView是处于UI模式。

UI模式是高于默认模式的,所以当Runloop发现有UI模式的事件时会优先处理UI模式下的事件,当一松开UI模式事件结束,接着才是默认模式下的事件. 

 另外,UI模式下,只有触摸才能处理事件,意思是讲如果你想把计数NSTimer的Runloop模式改成UI模式,只有当我触摸UI的时候才会处理你的计数事件,当我松开时,UI模式下事件已结束,计数事件不执行。

如果想计数NSTimer不在外环境的继续打印用第三个模式,占位模式(拥有默认模式和UI模式 弥补两者的不足)

你可能感兴趣的:(Runloop —运行循环)