NSRunLoop && NSTimer

新的一年的开始,希望大家一切越来越好,越来越开心快乐!!!

定时器及运行循环

  • NSRunLoop是iOS消息机制的处理模式
  • NSRunLoop的主要作用:控制NSRunLoop里面线程的执行和休眠,在有事情做的时候使当前NSRunLoop控制的线程工作,没有事情做让当前NSRunLoop的控制的线程休眠。 通过所有的“消息”都被添加到了NSRunLoop中去,而在这里这些消息并分为“input source”和“Timer source” 并在循环中检查是不是有事件需要发生,如果需要那么就调用相应的函数处理 定时器(NSTimer)

RunLoopMode(运行循环模式)

1.NSDefaultRunLoopMode 这是大多数操作中使用的模式。
2.NSConnectionReplyMode 该模式用来监控NSConnection对象。你通常
不需要在你的代码中使用该模式。
3.NSModalPanelRunLoopMode Cocoa使用该模式来标识modalpanel(模
态面板)的事件。
4.NSEventTracking(UITrackingRunLoopMode) Cocoa使用该模式来处
理用户界面相关的事件。
5.NSRunLoopCommonModes 这是一组可配置的通用模式。将input 
sources与该模式关联则同时也将input sources与该组中的其它模式进行了
关联。对于Cocoa应用,该模式缺省的包含了default,modal以及event tracking模式。

一个常见的问题就是,主线程中一个NSTimer添加在default mode中, 当界面上有一些scroll view的滚动频繁发生导致run loop运行在UItraking mode中, 从而这个timer没能如期望那般的运行。 所以,我们就可以把这个timer加到NSRunLoopCommonModes中来解决(iOS中)。 定时器是让程序定时执行某一个方法:

定时器(NSTimer)

/*
 * scheduledTimerWithTimeInterval: 间隔时间(秒)
 * target: 所要应用定时器的对象
 * selector: 调用的方法
 * userInfo: 所要传递的参数
 * repeats: 是否重复调用
 */
 
[NSTimer scheduledTimerWithTimeInterval:1 
target:self selector:@selector(timerAction:) userInfo:@"参数" repeats:YES];
望亲爱的大家都能学习到一点东西!!!欢迎收藏!!!
 
原文地址:https://www.cnblogs.com/Ruby-Hua/p/5093826.html