欢迎来到天天文库
浏览记录
ID:35975088
大小:23.09 KB
页数:3页
时间:2019-04-29
《文档NSRunLoop详解.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、NSRunLoop详解1.NSRunLoop是IOS消息机制的处理模式NSRunLoop的主要作用:控制NSRunLoop里面线程的执行和休眠,在有事情做的时候使当前NSRunLoop控制的线程工作,没有事情做让当前NSRunLoop的控制的线程休眠。2.NSRunLoop就是一直在循环检测,从线程start到线程end,检测inputsource(如点击,双击等操作)同步事件,检测timesource同步事件,检测到输入源会执行处理函数,首先会产生通知,corefunction向线程添加runloop observers来监听事件,
2、意在监听事件发生时来做处理。3.runloopmode是一个集合,包括监听:事件源,定时器,以及需通知的runloop observers模式包括:default模式:几乎包括所有输入源(除NSConnection) NSDefaultRunLoopMode模式 mode模式:处理modal panelsconnection模式:处理NSConnection事件,属于系统内部,用户基本不用event tracking模式:如组件拖动输入源 UITrackingRunLoopModes 不处理定时事件 common modes模式:NS
3、RunLoopCommonModes 这是一组可配置的通用模式。将input sources与该模式关联则同时也将input sources与该组中的其它模式进行了关联。 每次运行一个run loop,你指定(显式或隐式)run loop的运行模式。当相应的模式传递给run loop时,只有与该模式对应的input sources才被监控并允许run loop对事件进行处理(与此类似,也只有与该模式对应的observers才会被通知)5.NSTimer默认添加到当前NSRunLoop中,也可以手动制定添加到自己新建的NSRunLoop
4、的中[NSTimer schduledTimerWithTimeInterval: target:selector:userInfo:repeats];此方法默认添加到当前NSRunLoop中NSTimer *timer = [NSTimer timerWithTimeInterval: invocation:repeates:];NSTimer *timer = [[NSTimer alloc] initWithFireDate:...];创建timer [[NSRunLoop currentRunLoop] addTimer:t
5、imer forMode:NSRunLoopCommonModes]; 注意 timer的释放例:1).在timer与table同时执行情况,当拖动table时,runloop进入UITrackingRunLoopModes模式下,不会处理定时事件,此时timer不能处理,所以此时将timer加入到NSRunLoopCommonModes模式(addTimer forMode)2).在滚动一个页面时来松开,此时connection不会收到消息,由于scroll时runloop为UITrackingRunLoopModes模式,不接收输
6、入源,此时要修改connection的mode[scheduleInRunLoop:[NSRunLoop currentRunLoop]forMode:NSRunLoopCommonModes];6、子线程中的NSRunLoop需要手动启动,在子线程中使用timer要启动NSRunLoop。7、关于-(BOOL)runMode:(NSString *)mode beforeDate:(NSDate *)date;方法指定runloop模式来处理输入源,首个输入源或date结束退出。暂停当前处理的流程,转而处理其他输入源,当date设置
7、为[NSDate distantFuture](将来,基本不会到达的时间),所以除非处理其他输入源结束,否则永不退出处理暂停的当前处理的流程。8.while(A){ [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]; }当前A为YES时,当前runloop会一直接收处理其他输入源,当前流程不继续处理,出为A为NO,当前流程继续9、perform selector在thread中被序列化执行,这样就缓和了
8、许多在同一个thread中运行多个方法所产生的同步问题。perform selector source在运行完selector后自动从run loop中移除。当在非main thread中perform selector
此文档下载收益归作者所有