Runloop目的:
1.保住线程的生命
2.负责监听事件:触摸事件,NSTimer,网络
在ViewController里添加一个UITextView和一个计数循环NSTimer:
当拖拽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模式 弥补两者的不足)
网友评论