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

欢迎转载,转载时请注明出处:http://www.cnblogs.com/tanlong/p/5678569.html

*/

//这里直接在ViewController.m文件中写代码

@interface ViewController (){

NSTimer *_myTimer;

}

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

/*

interval: 此处设置为2.0,即表示2.0s后开始调用定时器,若下方repeats设置为YES,则每过2.0s都会执行一次,即循环执行

target: 执行的对象  selector:关联的方法 userInfo:需要传递的参数(可以是单个也可以是多个,推荐使用字典)  repeats:是否重复执行,设置为NO,则只执行一次

第一种创建方式,会自动把timer加入MainRunloop的NSDefaultRunLoopMode中。

而第二种创建方式,必须手动把timer加入MainRunloop的NSDefaultRunLoopMode中

*/

//第一种创建方式(可以不使用NSTimer进行接收,但如果这样做,就不能立即调用定时器),这里传了参数

_myTimer = [NSTimer scheduledTimerWithTimeInterval: 2.0

target: self

selector: @selector(timeAction:)

userInfo: @"我是定时器_myTimer"

repeats: YES];

//第二种创建方式,也可以不传参数

NSTimer *timer = [NSTimer  timerWithTimeInterval:2.0 target:self selector:@selector(timerAct:) userInfo:nil repeats:YES];

[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];

//如果此处调用fire方法,则定时器立即运行一次,无需等待interval值设置的时间

//[myTimer fire];

[timer fire];

NSLog(@"--1--");

//这里创建3个按钮,关联三个方法,分别用来暂停,继续,撤销定时器_myTimer

UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];

button.frame = CGRectMake( 50, 200, 100, 60);

[button setBackgroundColor: [UIColor grayColor]];

[button setTitle:@"stop" forState:UIControlStateNormal];

[button addTarget:self action:@selector(stop) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview: button];

UIButton *button2 = [UIButton buttonWithType:UIButtonTypeSystem];

button2.frame = CGRectMake( 50, 400, 100, 60);

[button2 setBackgroundColor: [UIColor grayColor]];

[button2 setTitle:@"continue" forState:UIControlStateNormal];

[button2 addTarget:self action:@selector(continueAction) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview: button2];

UIButton *button3 = [UIButton buttonWithType:UIButtonTypeSystem];

button3.frame = CGRectMake( 50, 600, 100, 60);

[button3 setBackgroundColor: [UIColor grayColor]];

[button3 setTitle:@"invalidate" forState:UIControlStateNormal];

[button3 addTarget:self action:@selector(invalidate) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview: button3];

}

/*

以下是2个定时器关联的方法(推荐带NSTimer参数,这样可以在需要时撤销定时器)

以及3各按钮关联的方法,分别做暂停,继续,撤销定时器操作

例如:1.运行程序,控制台立即打印--3--,--1--,2s后再打印--2--我是定时器_myTimer, 之后每过2s打印一次--3--,--2--.

2.点击暂停,定时器_myTimer暂停,控制台不再打印--2--我是定时器_myTimer。

3.点击继续,控制台立即打印一次--2--我是定时器_myTimer,之后再循环打印。每点击一次继续,都会立即调用一次定时器,我是定时器_myTime,打印一次--2--我是定时器_myTimer。

4.点击撤销,定时器_myTimer再不复存在了,之后再点击暂停继续都不会再做出响应。

*/

//定时器_myTimer关联的方法,这里打印传入的参数

- (void) timeAction:(NSTimer *) timer{

NSLog(@"--2--%@",timer.userInfo);

}

//定时器_timer关联的方法

- (void) timerAct: (NSTimer *) timer{

NSLog(@"--3--");

}

//暂停定时器(定时器还存在)

//例如设计一个游戏app,在程序进入后台时,可以暂停定时器,回到游戏时再继续定时器

- (void)stop {

[_myTimer setFireDate:[NSDate distantFuture]];

}

//开启(继续)定时器

-(void)continueAction{

//开启定时器

[_myTimer setFireDate:[NSDate distantPast]];

}

//撤销定时器(定时器不存在了)

- (void)invalidate{

[_myTimer invalidate];

//撤销后,推荐再nil一次

_myTimer = nil;

}

/* 以上代码可以直接复制粘贴到工程中运行,如果这篇文章对您有所帮助,请别吝啬你的赞哦*/

IOS中的NSTimer定时器详解的更多相关文章

  1. iOS中MVC等设计模式详解

    iOS中MVC等设计模式详解 在iOS编程,利用设计模式可以大大提高你的开发效率,虽然在编写代码之初你需要花费较大时间把各种业务逻辑封装起来.(事实证明这是值得的!) 模型-视图-控制器(MVC)设计 ...

  2. iOS中 蓝牙2.0详解/ios蓝牙设备详解 韩俊强的博客

    每日更新关注:http://weibo.com/hanjunqiang  新浪微博 整体布局如下:     程序结构如右图: 每日更新关注:http://weibo.com/hanjunqiang  ...

  3. iOS中线程同步基本详解

    为什么使用线程同步技术:多个线程是同时执行的 如果多个线程同时操作一个资源 会造成此资源的数据错乱 线程同步简介 线程同步,多条线程按顺序地访问某个资源 注意:此处的同步不是一起执行的意思 是一个一个 ...

  4. iOS中 CoreGraphics快速绘图(详解) 韩俊强的博客

    每日更新关注:http://weibo.com/hanjunqiang  新浪微博 第一步:先科普一下基础知识: Core Graphics是基于C的API,可以用于一切绘图操作 Core Graph ...

  5. iOS中UINavigationController控制器使用详解

    一.概述 UINavigationController用来管理视图控制器,在多视图控制器中常用.它以栈的形式管理视图控制器,管理视图控制器个数理论上不受限制(实际受内存限制),push和pop方法来弹 ...

  6. iOS中--NSArray调用方法详解 (李洪强)

    下面的例子以     NSArray *array = [NSArray arrayWithObjects:@"wendy",@"andy",@"to ...

  7. IOS中的网络编程详解

    在移动互联网时代,几乎所有应用都需要用到网络,比如QQ.微博.网易新闻.优酷.百度地图,只有通过网络跟外界进行数据交互.数据更新,应用才能保持新鲜.活力,如果没有了网络,也就缺少了数据变化,无论外观多 ...

  8. IOS 中列表的TableView 详解,常用方法整理

    一.创建一个列表,不管代码还是nib拖拉,在nib创建的时候,记得加他的二个代理 (UITableViewDelegate UITableViewDataSource) 代码创建的话,需要关联他的代理 ...

  9. IOS中UIActionSheet使用方法详解

    一.初始化方法 - (instancetype)initWithTitle:(NSString *)title delegate:(id<UIActionSheetDelegate>)de ...

随机推荐

  1. P.V操作【转】

    阐述P,V原语的理论不得不提到的一个人便是赫赫有名的荷兰科学家 E.W.Dijkstra.如果你对这位科学家没有什么印象的话,提起解决图论中最短路径问题的Dijkstra算法应当是我们再熟悉不过的了. ...

  2. platform机制

    最近在看SPI.I2C这样简单点的总线驱动程 序,从Linux2.6起,内核引入了一套新的驱动管理和注册机制:Platform_device和Platform_driver.现在Linux中 大部分的 ...

  3. chroot 命令实例讲解

    我是一个刚接触 Linux 和 Unix 的新手.我该如何改变一个命令的根目录?我要怎样改变一个进程的根目录呢,比如用 chroot 命令将web服务与文件系统隔离?我要如何使用 chroot 恢复密 ...

  4. J2EE开发常用开源框架技术(转)

    主要就我所了解的J2EE开发的框架或开源项目做个介绍,可以根据需求选用适当的开源组件进行开发.主要还是以Spring为核心,也总结了一些以前web开发常用的开源工具和开源类库 1持久层:1)Hiber ...

  5. JavaScript- 图片无缝滚动

    图片向上.向下.向左.向右不间断无缝滚动. 图片向下滚动: <div id="colee" style="overflow: hidden; height: 253 ...

  6. python学习(4)

    python(4)4.1 高阶函数:map/reduce map:实际上map也是一个函数,只不过他可以在参数里面包含别的函数.他有两种参数:第一种:函数(作用在后面要说的序列上),第二种:一个序列  ...

  7. 文件正在上传的转圈圈gif图片引出的fixed定位和absolute定位

     文件正在上传的转圈圈gif图片  一.文件上传时,未上传返回成功状态之前给个gif动态图片显示在页面,改善用户体验. <!--S 遮罩层 --> <div id="mas ...

  8. MySQL::SQL_MODE

    SQL_MODE可能是比较容易让开发人员和DBA忽略的一个变量,默认为空.SQL_MODE的设置其实是比较冒险的一种设置,因为在这种设置下可以允许一些非法操作,比如可以将NULL插入NOT NULL的 ...

  9. 【转】搭建Mac OS X下cocos2d-x的Android开发环境

    http://young40.github.io/blog/2013/02/23/setting-up-android-development-envirment-on-mac-os-x/ http: ...

  10. Using Sessions and Session Persistence---reference

    Using Sessions and Session Persistence The following sections describe how to set up and use session ...