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

时间:2022-12-11 13:05:32

定时器定时器详解ios定时器关闭定时器NSTimer

一,要使用一个定时器首先要定义一个定时器:

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

二,然后初始化,这里初始化有两种方式:

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

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

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

第(1)种示例:

//初始化定时器

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

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

//将定时器假如主循环中

RunLoop mainRunLoop] addTimer:_myTimer forMode:NSDefaultRunLoopMode];

第(2)种示例:

//初始化定时器

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

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

三,假如要立即开始:

//开启定时器

[_myTimer setFireDate:[NSDate distantPast]];

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

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

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

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

关闭定时器:

//关闭定时器

[_myTimer setFireDate:[NSDate distantFuture]];

五,取消定时器:

//取消定时器

[_myTimer invalidate];

_myTimer = nil;

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

这里要注意一下:

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

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

原网址:http://blog.csdn.net/zyzxrj/article/details/41842593

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

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

    1.要是用一个定时器,首先要定义一个定时器: @property(strong,nonatomic)NSTimer *myTimer;//定时器 2.初始化,初始化有两种方式: 第一种: + (NST ...

  2. iOS中-Qutarz2D详解及使用

    在iOS中Qutarz2D 详解及使用 (一)初识 介绍 Quartz 2D是二维绘图引擎. 能完成的工作有: 绘制图形 : 线条\三角形\矩形\圆\弧等 绘制文字 绘制\生成图片(图像) 读取\生成 ...

  3. 转载]IOS LBS功能详解[0](获取经纬度)[1](获取当前地理位置文本 )

    原文地址:IOS LBS功能详解[0](获取经纬度)[1](获取当前地理位置文本作者:佐佐木小次郎 因为最近项目上要用有关LBS的功能.于是我便做一下预研. 一般说来LBS功能一般分为两块:一块是地理 ...

  4. iOS 2D绘图详解(Quartz 2D)之路径(点,直线,虚线,曲线,圆弧,椭圆,矩形)

    前言:一个路径可以包含由一个或者多个shape以及子路径subpath,quartz提供了很多方便的shape可以直接调用.例如:point,line,Arc(圆弧),Curves(曲线),Ellip ...

  5. iOS开发——Block详解

    iOS开发--Block详解 1. Block是什么 代码块 匿名函数 闭包--能够读取其他函数内部变量的函数 函数变量 实现基于指针和函数指针 实现回调的机制 Block是一个非常有特色的语法,它可 ...

  6. iOS开发:详解Objective-C runTime

    Objective-C总Runtime的那点事儿(一)消息机制 最近在找工作,Objective-C中的Runtime是经常被问到的一个问题,几乎是面试大公司必问的一个问题.当然还有一些其他问题也几乎 ...

  7. iOS应用开发详解

    <iOS应用开发详解> 基本信息 作者: 郭宏志    出版社:电子工业出版社 ISBN:9787121207075 上架时间:2013-6-28 出版日期:2013 年7月 开本:16开 ...

  8. 了解iOS消息推送一文就够:史上最全iOS Push技术详解

    本文作者:陈裕发, 腾讯系统测试工程师,由腾讯WeTest整理发表. 1.引言 开发iOS系统中的Push推送,通常有以下3种情况: 1)在线Push:比如QQ.微信等IM界面处于前台时,聊天消息和指 ...

  9. iOS开发者证书-详解

    iOS开发者证书-详解/生成/使用 本文假设你已经有一些基本的Xcode开发经验, 并注册了iOS开发者账号. 相关基础 加密算法 现代密码学中, 主要有两种加密算法: 对称密钥加密 和 公开密钥加密 ...

随机推荐

  1. iOS中获取当前时间,设定时间,并算出差值

    NSDate *date = [NSDate date];//获取当前时间 NSTimeZone *zone = [NSTimeZone systemTimeZone];//修改时区 NSIntege ...

  2. 完全卸载Oracle11G

    要特别注意删除注册表的这块,如果删错了会导致系统出现问题,而且oracle的安装卸载真的很烦,一旦装错了,卸载不干净就会导致种种的问题无法再次安装,个人建议用360卸载,360卸载完成后会自动检测到无 ...

  3. 如果我用C&num;来输出99表

    题目:参见这个链接,简单点说就是在控制台输出一个99乘方表. 无聊想了个C#版本的解答: private static void Print(int n) { var s = Enumerable.R ...

  4. listview的头布局把我的ACTION&lowbar;DOWN事件给吃了&period;&period;&period;&period;&period;

    因为头布局的viewpager自己处理点击事件 public boolean dispatchTouchEvent(MotionEvent ev) { switch (ev.getAction()) ...

  5. Hamming Weight的算法分析(转载)

    看代码时遇到一个求32bit二进制数中1的个数的问题,感觉算法很奇妙,特记录学习心得于此,备忘. 计算一个64bit二进制数中1的个数. 解决这个问题的算法不难,很自然就可以想到,但是要给出问题的最优 ...

  6. ATSHA204加密认证IC

    The Atmel® ATSHA204 is a full turnkey security device. It includes a 4.5Kb EEPROM divided into 16 sl ...

  7. 2017&period;08&period;08【NOIP提高组】模拟赛B组

    Summary 今天的题目也不算很难,唯一一道没做出来的题目是以前做过的,太不应该了. Problem T1 油滴扩展 题目大意 给你一堆点,你准备要在这么多的点当中滴油.你可以自己安排顺序,每次滴油 ...

  8. 用JS制作一个信息管理平台&lpar;1&rpar;

    首先,介绍一些需要用到的基本知识. [JSON] JSON是数据交互中,最常用的一种数据格式. 由于各种语言的语法都不相同,在传递数据时,可以将自己语言中的数组.对象等转换为JSON字符串. 传递之后 ...

  9. 11:django 模板 内建标签

    django 内建标签 autoescape 控制当前自动转义的行为,有on和off两个选项 {% autoescape on %} {{ body }} {% endautoescape %} bl ...

  10. 关于VC预定义常量&lowbar;WIN32,WIN32,&lowbar;WIN64(转)

    VC2012 下写 Windows 程序时,有时需要判断编译环境.在之前的文章<判断程序是否运行在 Windows x64 系统下.>里说过如何在运行期间判断系统环境,但在编译时如何判断? ...