`

IOS 计时器 NSTimer

阅读更多

1、初始化

+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)yesOrNo;

+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)yesOrNo;

注:不用scheduled方式初始化的,需要手动addTimer:forMode: 将timer添加到一个runloop中。

  而scheduled的初始化方法将以默认mode直接添加到当前的runloop中.

 

举例:

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:10.0 target:self selector:@selector(timerFired:userInfo:nil repeats:NO];

NSTimer *myTimer = [NSTimertimerWithTimeInterval:3.0 target:selfselector:@selector(timerFired:) userInfo:nilrepeats:NO];

[[NSRunLoopcurrentRunLoopaddTimer:myTimerforMode:NSDefaultRunLoopMode];

 

2、触发(启动)

当定时器创建完(不用scheduled的,添加到runloop中后,该定时器将在初始化时指定的timeInterval秒后自动触发。

 

可以使用-(void)fire;方法来立即触发该定时器;

注:You can use this method to fire a repeating timer without interrupting its regular firing schedule. If the timer is non-repeating, it is automatically invalidated after firing, even if its scheduled fire date has not arrived.

在重复执行的定时器中调用此方法后立即触发该定时器,但不会中断其之前的执行计划;

在不重复执行的定时器中调用此方法,立即触发后,就会使这个定时器失效。

 

3、停止

- (void)invalidate;

这个是唯一一个可以将计时器从runloop中移出的方法。

 

注:

NSTimer可以精确到50-100毫秒.

NSTimer不是绝对准确的,而且中间耗时或阻塞错过下一个点,那么下一个点就pass过去了.

 

使用代码例子:

 

在游戏循环中很好用的计时器
- (void)StartTimer
{
//repeats设为YES时每次 invalidate后重新执行,如果为NO,逻辑执行完后计时器无效
  [NSTimer  scheuledTimerWithTimeInterval:1.0/60.0  target: view  selector:@(timerAdvanced:) 
            userInfo:nil  repeats: YES];
}
 
- (void)timerAdvanced:(NSTimer *)timer//这个函数将会执行一个循环的逻辑
{
  //加一个计数器
  int  mTime;
  if (mTime == 0)
  {
    [timer invalidate];
    [self StartTimer];
  }
  mTime++;
  if(mTime >= 某个最大值MAXCOUNT)
    //处理某些逻辑
    。。。。。
    //在某处将 mTime重设为0
}
分享到:
评论

相关推荐

    ios计时器NSTimer的使用

    在这个例子中,我们每秒调用一次`updateCounter`方法,`repeats: true`表示计时器将持续触发,直到被取消。 倒计时10秒的实现如下: ```swift var remainingSeconds = 10 func startCountdown() { timer = Timer...

    iOS计时器(OC版)

    总的来说,OC版的iOS计时器主要涉及`NSTimer`的创建、添加到运行循环、处理计时器触发的事件以及控制计时器的状态。理解并熟练掌握这些知识点对于iOS开发者来说非常重要,因为它们在许多场景下都有应用,如游戏计时...

    ios-计时器.zip

    在Objective-C或Swift中,我们可以使用`NSTimer`(Objective-C)或`Timer`(Swift)类来创建计时器。计时器不是线程安全的,它运行在RunLoop的上下文中,因此通常与UI更新相关联。创建计时器的基本步骤如下: 1. ...

    简单的时间选择器Nstimer

    这个“简单的时间选择器Nstimer”是一个实用工具,它提供了一个用户界面来控制`NSTimer`,允许用户进行暂停、清零等操作,非常适合学习`NSTimer`的基础用法和交互设计。 `NSTimer`是`NSRunLoop`的一部分,它不直接...

    ios-高精度高定制化可代替系统NSTimer的脉冲式计时器 --- MKImpulse.zip

    MKImpulse是一个用来代替系统NSTimer的高精度脉冲器 系统的NSTimer是添加到Runloop中的, 在系统繁忙时会造成偏差, 时间越长, 偏差越大 而MKImpulse是基于GCD编写的脉冲器, 精度由CPU时钟进行计算, 误差基本可以...

    IOS计时器设计

    多种方法实现计时器,包括通信获取服务器端系统时间,多线程实现,NSTimer实现等等 http://blog.csdn.net/dingxiaowei2013/article/details/9864279

    ios-倒数功能的计时器.zip

    1. **计时器基础**:在iOS开发中,我们通常使用`NSTimer`或`CADisplayLink`来创建计时器。在这个案例中,可能是使用了`NSTimer`,因为它适合周期性执行任务,如倒计时更新UI。`NSTimer`需要一个选择器(selector)来...

    ios-一个方法添加按钮计时器.zip

    计时器(Timer)在iOS中通常是通过NSTimer类来创建和管理的。NSTimer是一个调度对象,可以按照预定的时间间隔触发事件。在按钮上添加计时器,我们可以设置一个时间间隔,当这个时间过去后,计时器会发送一个消息给它...

    iOS GCD timer 计时器

    GCD timer是基于GCD的一种计时器实现,相较于NSTimer,它提供了一种更高效、更易于管理的计时器解决方案。本篇文章将深入探讨iOS GCD timer的相关知识点,并介绍如何封装和使用。 1. **GCD基础** - GCD是Apple提供...

    NSTimer实现的小计时器

    本文将深入探讨`NSTimer`的使用,特别是在创建小计时器时的两种类方法,以及它们如何受到屏幕滚动事件的影响及解决方案。 一、NSTimer类介绍 `NSTimer`是Foundation框架的一部分,它允许开发者在指定的时间间隔后...

    IOS 中NSTimer定时器的使用

    IOS 中NSTimer定时器的使用 NSTimery 定时器,主要用于进行定时执行指定方法,常用场景如:获取验证码的按钮倒计时;图片轮播定时。 1 使用注意事项: 1.1 倒计时时间间隔(时间单位是秒) 1.2 指定的执行方法 1.3...

    ios-计时器实现时钟.zip

    本项目“ios-计时器实现时钟.zip”提供的DHTimerDemo应该是一个简单的示例,展示了如何利用苹果的Foundation框架中的NSTimer或Swift的Timer类来创建一个实时更新的时钟界面。 首先,我们要了解iOS中的定时器基础。...

    sample-ios-timer:我将尝试了解iOS计时器并制作示例。 (仍在进行中)

    示例iOS计时器 有时候,您将Timer视为线程并使用它, 似乎很少有人不知道RunLoop的commonModes是否已设置和使用。 我没有思考就使用它。 如果同步不正确,我将在某种程度上对其进行纠正并使用它。 反思无知,再次...

    iOS定时器Demo

    创建`NSTimer`通常涉及`scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:`方法,参数分别代表时间间隔、目标对象、选择器方法、用户信息和是否重复。 - 使用`addTimer:toRunLoop:forMode:`将...

    NSTimer 使用 文档说明

    计时器队列 `NSTimer`可以关联到不同的`OperationQueue`或`DispatchQueue`上,以控制其执行顺序和优先级: ```swift let backgroundQueue = DispatchQueue.global() let timer = Timer(timeInterval: 1.0, target...

    iOS之UITableView计时器的实现方式总结(NSTimer、DispatchSource、CADisplayLink)

    在iOS开发中,UITableView经常需要配合计时器来实现各种动态效果或实时更新。本文将详细介绍在UITableView中使用计时器的四种常见实现方式:NSTimer、DispatchSource、CADisplayLink,以及一种特殊的NSTimer使用场景...

    LSTTimer 性能和精度兼得的iOS计时器组件

    LSTTimer 性能和精度兼得的iOS计时器组件github: https://github.com/LoSenTrad/LSTTimer简书: https://www.jianshu.com/p/4f05c7e26bb11.特性提供丰富的api,简单入手使用单例设计,安全且占用内存少,统一管理app所有...

    简单计时器

    在这里,我们主要探讨iOS平台上的计时器应用开发。 在iOS上构建一个计时器应用,你需要掌握以下关键知识点: 1. **Swift编程语言**: iOS开发主要使用Swift,这是一种由Apple推出的强大且易于学习的编程语言。理解...

Global site tag (gtag.js) - Google Analytics