IOS中的NSTimer定时器详解
/* 在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定时器详解的更多相关文章
- iOS中MVC等设计模式详解
iOS中MVC等设计模式详解 在iOS编程,利用设计模式可以大大提高你的开发效率,虽然在编写代码之初你需要花费较大时间把各种业务逻辑封装起来.(事实证明这是值得的!) 模型-视图-控制器(MVC)设计 ...
- iOS中 蓝牙2.0详解/ios蓝牙设备详解 韩俊强的博客
每日更新关注:http://weibo.com/hanjunqiang 新浪微博 整体布局如下: 程序结构如右图: 每日更新关注:http://weibo.com/hanjunqiang ...
- iOS中线程同步基本详解
为什么使用线程同步技术:多个线程是同时执行的 如果多个线程同时操作一个资源 会造成此资源的数据错乱 线程同步简介 线程同步,多条线程按顺序地访问某个资源 注意:此处的同步不是一起执行的意思 是一个一个 ...
- iOS中 CoreGraphics快速绘图(详解) 韩俊强的博客
每日更新关注:http://weibo.com/hanjunqiang 新浪微博 第一步:先科普一下基础知识: Core Graphics是基于C的API,可以用于一切绘图操作 Core Graph ...
- iOS中UINavigationController控制器使用详解
一.概述 UINavigationController用来管理视图控制器,在多视图控制器中常用.它以栈的形式管理视图控制器,管理视图控制器个数理论上不受限制(实际受内存限制),push和pop方法来弹 ...
- iOS中--NSArray调用方法详解 (李洪强)
下面的例子以 NSArray *array = [NSArray arrayWithObjects:@"wendy",@"andy",@"to ...
- IOS中的网络编程详解
在移动互联网时代,几乎所有应用都需要用到网络,比如QQ.微博.网易新闻.优酷.百度地图,只有通过网络跟外界进行数据交互.数据更新,应用才能保持新鲜.活力,如果没有了网络,也就缺少了数据变化,无论外观多 ...
- IOS 中列表的TableView 详解,常用方法整理
一.创建一个列表,不管代码还是nib拖拉,在nib创建的时候,记得加他的二个代理 (UITableViewDelegate UITableViewDataSource) 代码创建的话,需要关联他的代理 ...
- IOS中UIActionSheet使用方法详解
一.初始化方法 - (instancetype)initWithTitle:(NSString *)title delegate:(id<UIActionSheetDelegate>)de ...
随机推荐
- Centos 6.5升级安装Git
安装需求 # yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel# yum install gcc pe ...
- NOIP2002 矩形覆盖
题四 矩形覆盖(存盘名NOIPG4) [问题描述]: 在平面上有 n 个点(n <= 50),每个点用一对整数坐标表示.例如:当 n=4 时,4个点的坐标分另为:p1(1,1),p2(2,2), ...
- git 版本历史
版本:git rev-parse --git-dir显示Git版本库的位置 --show-cdup显示当前工作区目录的深度 --parseopt解析命令行参数 $ git rev-parse - ...
- POJ-1177 Picture 矩形覆盖周长并
题目链接:http://poj.org/problem?id=1177 比矩形面积并麻烦点,需要更新竖边的条数(平行于x轴扫描)..求横边的时候,保存上一个结果,加上当前长度与上一个结果差的绝对值就行 ...
- Codeforces Round #226 (Div. 2)B. Bear and Strings
/* 题意就是要找到包含“bear”的子串,计算出个数,需要注意的地方就是不要计算重复. */ 1 #include <stdio.h> #include <string.h> ...
- 如何把.rar文件隐藏在一个图片内
首先假设我们要隐藏的.rar文件叫a.rar,图片叫a.jpg.先把他俩放到同一个目录下,然后通过“cmd”进入windows命令行,进入目标目录下,使用以下命令进行隐藏: copy/B a.jpg ...
- MSSQL 多个表关联更新
正确写法2):UPDATE A SET A.mobilephone = b.mobile FROM tb_contact A,tmp_contact b WHERE A.contact_name = ...
- 取正在运行的DLL或EXE的路径
function GetSelfPath: string;var ModuleName: string; i: Integer;begin SetLength(ModuleName, 255); ...
- 关于JAVA中URL传递中文参数的问题
今天在调用一个接口时,需要传递一个中文参数,结果获取不到数据,原因就在于中文传参的编码问题. 问题来源:URL url= new URL("http://XXX?OrganName=司法厅& ...
- Objective-C中一种消息处理方法performSelector: withObject:
Objective-C中调用函数的方法是“消息传递”,这个和普通的函数调用的区别是,你可以随时对一个对象传递任何消息,而不需要在编译的时候声明这些方法.所以Objective-C可以在runtime的 ...