解决UITableView上计时器(Timer)的滑动问题

要想计时器(Timer)不因UITableView的滑动而停止工作,就得探讨一下RunLoop了。

 RunLoop本质和它的意思一样是运行着的循环,更确切的说是线程中的循环。它用来接受循环中的事件和安排线程工作,并在没有工作时,让线程进入睡眠状态。

 所以根据RunLoop的定义,当Timer被滑动过了,误以为没有工作,让它进入睡眠状态了。怎样来避免这种情况呢?我们可以先来了解RunLoop的几种模式。RunLoop有Default模式、Connection模式、Modal模式、Event tracking模式和Common模式(具体模式的含义在[http://www.cnblogs.com/fmdxiangdui/p/6164350.html](http://www.cnblogs.com/fmdxiangdui/p/6164350.html "模式含义详解")介绍)。在Cocoa应用程序中,默认情况下Common Modes包含default modes,modal modes,event Tracking modes.可使用CFRunLoopAddCommonMode方法想Common Modes中添加自定义modes。因此,我们需要把计时器的RunLoop的Mode调整为Common模式。具体的操作如下:

1 NSTimer *timer = [NSTimer timerWithTimeInterval:1.0f target:self selector:@selector(timerAction) userInfo:nil repeats:YES];

2 //将定时器添加到runloop中

3 [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes ];

4 [[NSRunLoop currentRunLoop] run];

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 定时器的用法 系统提供了8个创建方法,6个类创建方法,2个实例初始化方法。有三个方法直接将timer添加到...
    gpylove阅读 1,843评论 1 3
  • 基本概念 进程 进程是指在系统中正在运行的一个应用程序,而且每个进程之间是独立的,它们都运行在其专用且受保护的内存...
    小枫123阅读 949评论 0 1
  • 技术迁移:http://blog.csdn.net/iosbird/article/details/7636004...
    笑啥风云阅读 912评论 0 0
  • NSTimer 是系统提供的定时器,系统提供的api也比较简单,使用很方便,项目开发中会经常用到。然而,在使用NS...
    恋空K阅读 4,058评论 0 13
  • 一、什么是NSRunLoop NSRunLoop是消息机制的处理模式 NSRunLoop的作用在于有事情做的时候使...
    KK_boy阅读 525评论 0 0