文档NSRunLoop详解.docx

文档NSRunLoop详解.docx

ID:35975088

大小:23.09 KB

页数:3页

时间:2019-04-29

文档NSRunLoop详解.docx_第1页
文档NSRunLoop详解.docx_第2页
文档NSRunLoop详解.docx_第3页
资源描述:

《文档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

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。