NSTimer导致误差的原因

原创 2016年05月30日 15:14:04
//NSTimer导致误差的原因:
    
    /*
     1、NSTimer加在main runloop中,模式是NSDefaultRunLoopMode,main负责所有主线程事件,例如UI界面的操作,复杂的运算,这样在同一个runloop中timer就会产生阻塞。
     
     2、模式的改变。主线程的 RunLoop 里有两个预置的 Mode:kCFRunLoopDefaultMode 和 UITrackingRunLoopMode。
     
     当你创建一个 Timer 并加到 DefaultMode 时,Timer 会得到重复回调,但此时滑动一个ScrollView时,RunLoop 会将 mode 切换为 TrackingRunLoopMode,这时 Timer 就不会被回调,并且也不会影响到滑动操作。所以就会影响到NSTimer不准的情况。
     
     PS:DefaultMode 是 App 平时所处的状态,rackingRunLoopMode 是追踪 ScrollView 滑动时的状态。
     
     */
    
    
    //解决的方法:
    //1、在主线程中进行NSTimer操作,但是将NSTimer实例加到main runloop的特定mode(模式)中。避免被复杂运算操作或者UI界面刷新所干扰。
    self.timer = [NSTimer timerWithTimeInterval:1 target:self selector:@selector(showTime) userInfo:nil repeats:YES];
    
    [[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
    
}

- (void)timerMethod2 {
    
    //2、在子线程中进行NSTimer的操作,再在主线程中修改UI界面显示操作结果;
    NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(newThread) object:nil];
    [thread start];
}

-(void)newThread
{
    @autoreleasepool {
        
        [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(showTime) userInfo:nil repeats:YES];
        
        [[NSRunLoop currentRunLoop] run];
    }
}


-(void)showTime
{
    //1.一开始的时候系统就为我们将主线程的main runloop隐式的启动了。

    //2.在创建线程的时候,可以主动获取当前线程的runloop。每个子线程对应一个runloop
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

Instruments使用技巧

最近采用Instruments 来分析整个应用程序的性能.发现很多有意思的点,以及性能优化和一些分析性能消耗的技巧,小结如下。 Instruments使用技巧 关于Instruments官...

iOS系统GCD学习(5):信号量机制

当我们在处理一系列线程的时候,当数量达到一定量,在以前我们可能会选择使用NSOperationQueue来处理并发控制,但如何在GCD中快速的控制并发呢?答案就是dispatch_semaphore,...

GPS 入门 5 —— 定位误差产生的原因和差分定位原理

GPS定位误差产生的原因     我们在利用GPS进行定位时,会受到各种各样因素的影响。影响GPS定位精度的因素可分为以下四大类: (1)与GPS卫星有关的因素 ...

PHP浮点运算结果出现误差原因分析及解决方案

如下: Php代码   float a = 0.65f;   float b = 0.6f;   float c = a - b;     此时c为多少? ...

浮点运算结果出现误差原因分析及解决方案

开篇:在进行金融财务等数值运算时,请使用decimal 类型,不要使用float和double类型!因为decimal的精度最高 如下C#代码: float a = 0.65f; float b...
  • iloli
  • iloli
  • 2012年12月28日 14:38
  • 12412

统计误差如何产生 浏览器数据打架的原因

目前定期发布全球浏览器市场份额的公司有两家, StatCounter 和 NetApplications 。它们的统计,都是基于网站服务器端对浏览器访问记录的计算。当浏览器访问网站时,浏览器向服务器发...
  • xcntime
  • xcntime
  • 2012年08月12日 14:59
  • 764

机器学习十二 误差原因与模型复杂度

误差原因(Error):用于测量模型性能的基本指标。 在模型预测中,模型可能出现的误差来自两个主要来源,即:因模型无法表示基本数据的复杂度而造成的偏差(bias),或者因模型对训练它所用的有限数据过度...

关于ERP系统库存误差的原因剖析

这里不讨论代码写错的原因。主要讨论逻辑设计不够完善和用户实际操作顺序不当,引起的情况。并把它们归纳起来,在日后提高。 1、实际业务操作与系统流程的不同步。曾经遇到几次,用户在配送和调拨操作中,接收部...
  • sgliky
  • sgliky
  • 2013年05月23日 07:53
  • 973
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:NSTimer导致误差的原因
举报原因:
原因补充:

(最多只允许输入30个字)