iOS NSTimer使用详解 开启、关闭、移除
定时器定时器详解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使用详解 开启、关闭、移除的更多相关文章
- 36、NSTimer使用详解-开启、关闭、移除
1.要是用一个定时器,首先要定义一个定时器: @property(strong,nonatomic)NSTimer *myTimer;//定时器 2.初始化,初始化有两种方式: 第一种: + (NST ...
- iOS中-Qutarz2D详解及使用
在iOS中Qutarz2D 详解及使用 (一)初识 介绍 Quartz 2D是二维绘图引擎. 能完成的工作有: 绘制图形 : 线条\三角形\矩形\圆\弧等 绘制文字 绘制\生成图片(图像) 读取\生成 ...
- 转载]IOS LBS功能详解[0](获取经纬度)[1](获取当前地理位置文本 )
原文地址:IOS LBS功能详解[0](获取经纬度)[1](获取当前地理位置文本作者:佐佐木小次郎 因为最近项目上要用有关LBS的功能.于是我便做一下预研. 一般说来LBS功能一般分为两块:一块是地理 ...
- iOS 2D绘图详解(Quartz 2D)之路径(点,直线,虚线,曲线,圆弧,椭圆,矩形)
前言:一个路径可以包含由一个或者多个shape以及子路径subpath,quartz提供了很多方便的shape可以直接调用.例如:point,line,Arc(圆弧),Curves(曲线),Ellip ...
- iOS开发——Block详解
iOS开发--Block详解 1. Block是什么 代码块 匿名函数 闭包--能够读取其他函数内部变量的函数 函数变量 实现基于指针和函数指针 实现回调的机制 Block是一个非常有特色的语法,它可 ...
- iOS开发:详解Objective-C runTime
Objective-C总Runtime的那点事儿(一)消息机制 最近在找工作,Objective-C中的Runtime是经常被问到的一个问题,几乎是面试大公司必问的一个问题.当然还有一些其他问题也几乎 ...
- iOS应用开发详解
<iOS应用开发详解> 基本信息 作者: 郭宏志 出版社:电子工业出版社 ISBN:9787121207075 上架时间:2013-6-28 出版日期:2013 年7月 开本:16开 ...
- 了解iOS消息推送一文就够:史上最全iOS Push技术详解
本文作者:陈裕发, 腾讯系统测试工程师,由腾讯WeTest整理发表. 1.引言 开发iOS系统中的Push推送,通常有以下3种情况: 1)在线Push:比如QQ.微信等IM界面处于前台时,聊天消息和指 ...
- iOS开发者证书-详解
iOS开发者证书-详解/生成/使用 本文假设你已经有一些基本的Xcode开发经验, 并注册了iOS开发者账号. 相关基础 加密算法 现代密码学中, 主要有两种加密算法: 对称密钥加密 和 公开密钥加密 ...
随机推荐
- js回车动态添加表格,右键动态删除表格行
<script type="text/javascript" language="javascript">//屏蔽浏览器右键function sto ...
- .NET3.5项目转.NET2.0项目技巧
最近有一个项目,一开始开发是用VS2008(.NET3.5)开发的,该项目是一个Windorm客户端软件,由于在大规模的推广过程中,发现在安装.NET3.5Framework的时候浪费了太多时间,而且 ...
- php 画图片3
<?php // 中文验证码 // 1. 创建画布 $im = imagecreatetruecolor(200, 200); // 2. 创建背景色 // 2.1得到背景颜色 $bg_colo ...
- C++线程中packaged_tack
packaged_tack<>函数是一个你可以先定义好任务的类型,但是不想马上启动.函数可以在你想要启动任务是启动,你只需要调用你声明的函数就可以. #include <future ...
- Java 自定义注解
在spring的应用中,经常使用注解进行开发,这样有利于加快开发的速度. 介绍一下自定义注解: 首先,自定义注解要新建一个@interface,这个是一个注解的接口,在此接口上有这样几个注解: @Do ...
- handlebars,each循环里面套each循环
handlebars可以用each自动进行循环,下面介绍一下each循环里面套循环来着. html代码 !DOCTYPE html> <html> <head> < ...
- Android开源控件PhotoView的使用
整体来说,它是一个更高级的ImageView,支持缩放,多点触控缩放,滚动和滑动,单机,长按等事件: PhotoView的git托管地址:https://github.com/chrisbanes/P ...
- Destoon B2B 调优SQL后 生成首页仍然慢或不成功的原因
修改php.ini文件,查找 ;date.timezone = ,把前面的分号去掉在 “=”后面加上时区. 比如:Asia/Shanghai (上海) 自动task有上面的问题 但后台生成时这样修改后 ...
- win7绕过开机密码攻略
访问windows机器,经常会因为忘记了开机密码而苦恼.当然你也可以选择重装,这样最简单粗暴.如果有重要数据保存在C盘之类的(个人严重推荐不要保存到C盘),那就不是重装能解决的问题了.2014年12月 ...
- Xamarin Android.Views.WindowManagerBadTokenException: Unable to add window -- token android.os.BinderProxy
Android.Views.WindowManagerBadTokenException: Unable to add window -- token android.os.BinderProxy@ ...