1、要是用一个定时器,首先要定义一个定时器:

@property(strong,nonatomic)NSTimer *myTimer;//定时器

2、初始化,初始化有两种方式:

第一种:

+ (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;

这两种初始化方式是有区别的:假如你用第一种就要自己将这个计时器加入主循环中,否则不会调用selector后面的方法,但是第二种就是在初始化一个定时器的同时直接将这个定时器加入主循环,所以并不用自己添加,下面举例:

第一种示例:

//初始化定时器

imer=[NSTimer timerWithTimeInterval:5 target:self selector:@selector(startLoction) userInfo:nil repeats:YES];

在初始化之后并不会调用,在添加下面这句将定时器加入主循环中的代码5秒才开始调用startLocation方法,又要repeats:YES,所以这里是循环调用,假如NO只调用一次。

//将定时器加入主循环中

[NsRunloop mainRunLoop] addTimer:_myTimer forMode:NsDefaultRunLoopMode];

//初始化定时器

imer=[NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(startLocation) userInfor:nil repeats:YES];

这种方式就是该定时器将在初始化时指定的timeInterval秒后自动触发(也就是在这句代码写完的后5秒循环调用startLocation方法)。

3、假如要立即开始:

//开启定时器

[_myTimer setFireDate:[NSDate distantPast]];

在重复执行的定时器中调用此方法后立即触发该定时器,但不会中断其之前执行的计划;(也就是在立即调用后,5秒之后又会调用启动定位的方法)

在不重复执行的定时器中调用此方法,立即触发后,就会是这个定时器实效。(立即调用完就结束)

4、要想实现:先停止,然后在某种情况下在此开启运行timer,可以使用下面的方法:

首先关闭定时器不能使用上面的方法,应该使用下面的方法

关闭定时器:

//关闭定时器

[_myTimer setFierDate:[NSDate distantFuture]];

5、取消定时器:

//取消定时器

[_myTimer invalidate];

_myTimer = nil;

停止timer的运行,这个是永久的停止,这也是唯一一个可以将计时器从runloop中移除的方法。

这里要注意一下:

NSTimer可以精确到50-100毫秒

NSTimer不是绝对准确的,而且中间耗时或阻塞错过下一个执行点,那么久pass继续执行其他的计划。

36、NSTimer使用详解-开启、关闭、移除的更多相关文章

  1. iOS NSTimer使用详解 开启、关闭、移除

    定时器定时器详解ios定时器关闭定时器NSTimer 一,要使用一个定时器首先要定义一个定时器: @property (strong, nonatomic) NSTimer *myTimer;//定时 ...

  2. 重新想象 Windows 8 Store Apps (36) - 通知: Tile 详解

    [源码下载] 重新想象 Windows 8 Store Apps (36) - 通知: Tile 详解 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 通知 Tile ...

  3. IOS中的NSTimer定时器详解

    /* 在IOS中有多种定时器,这里我对NSTimer定时器做了一个简单的介绍.如果你是小白,你可能会从这篇文章中学习到一些知识,如果你是大牛,请别吝啬你的评论,指出我的不足,你的质疑是对我最大的帮助. ...

  4. python标准库介绍——36 popen2 模块详解

    ==popen2 模块== ``popen2`` 模块允许你执行外部命令, 并通过流来分别访问它的 ``stdin`` 和 ``stdout`` ( 可能还有 ``stderr`` ). 在 pyth ...

  5. 36、TreeSet详解

    TreeSet是SortedSet接口的实现类,TreeSet可以保证元素处于排序状态.与HashSet相比,TreeSet还提供了如下几个而外的方法: 1).Comparator comparato ...

  6. Nginx开启Gzip详解

    最近生产上发生了一些问题,原先所有的静态资源文件都是经过gzip压缩的,然而这几天突然都没有压缩了,经过一顿排查,发现是Nginx的配置有问题,借此机会详细了解了Nginx的Gzip配置. 1. Ng ...

  7. nginx之旅(第一篇):nginx下载安装、nginx启动与关闭、nginx配置文件详解、nginx默认网站

    一.nginx下载安装 版本nginx 1.15.5 系统环境centos7.5(本机ip192.168.199.228) 关闭selinux 和防火墙firewall 1.下载 wget http: ...

  8. CentOS 7.5关闭FireWall 和SELinux图文详解

    CentOS 7.5关闭FireWall 和SELinux图文详解 1. 环境 CentOS 7.5 2. 关闭FireWall和SELinux 2.1 FireWall 使用systemctl st ...

  9. 开启PHP exif扩展方法详解

    服务器配置说明: 1.在php.ini文件中找到;extension=php_exif.dll,去掉前面的分号2.在php.ini文件中找到;extension=php_mbstring.dll,去掉 ...

随机推荐

  1. Cisco 4507R+E四引擎VSS故障解决

    如果可以要做双引擎VSS(每个机箱1个引擎), 3.6.7版本可以实现 如果需要做4引擎VSS(每个机箱2个引擎) 请使用3.8.x和之后的版本.

  2. nodemcu生成LUA版本固件

    构建自己的固件地址 https://nodemcu-build.com/

  3. 并发编程中Future和Callable使用

    Future模式非常适合在处理很耗时很长的业务逻辑时进行使用,可以有效的减少系统的响应时间,提高系统的吞吐量. 看一个小的demo: 看一下执行结果: 这是异步去获取结果的示例,在子线程去处理任务的时 ...

  4. 了解Queue

    在并发队列上JDK提供了两套实现,一个是以ConcurrentLinkedQueue为代表的高性能队列,一个是以BlockingQueue接口为代表的阻塞队列,无论哪种都继承自Queue, 可以对应着 ...

  5. windows 2012安装不了KB2919355

    直接安装KB2919355会报错 “此更新不适用于你的计算机” 此时应先安装 KB2919442 https://www.microsoft.com/zh-cn/download/confirmati ...

  6. Windows 64 位 mysql 5.7.20 安装教程

    mysql 5.7以上版本包解压中没有data目录和my-default.ini和my.ini文件以及服务无法启动的解决办法以及修改初始密码的方法 mysql官网下载地址:https://dev.my ...

  7. day 05 字典,字典嵌套

    字典: 1.列表如果存储大量数据,查询速度相对慢一些 2.列表存储的数据,一般没有什么关联性 针对以上原因,python提供了一个基础数据类型,dict 字典 数据类型的分类 : 容器型数据类型:li ...

  8. Redis 中 redis.conf配置详细解析

    ########################################### 基本配置 ##################################### # 端口 port 666 ...

  9. Head First Servlets & JSP 学习笔记 第二章 —— Web应用体系结构

    Servlet没有main()方法,所以Servlet受其他人控制,这个其他人就是容器!而Tomcat就是一种容器. 容器向Servlet提供Http请求和Http响应:容器来调用Servlet的do ...

  10. CSS-calc 兼容写法

    width: 90%;/*写给不支持calc()的浏览器*/ width:-moz-calc(100% - (10px + 5px) * 2); width:-webkit-calc(100% - ( ...