IOS 中NSTimer定时器的使用

IOS 中NSTimer定时器的使用

NSTimery 定时器,主要用于进行定时执行指定方法,常用场景如:获取验证码的按钮倒计时;图片轮播定时。

1 使用注意事项:

1.1 倒计时时间间隔(时间单位是秒)
1.2 指定的执行方法
1.3 实现指定执行方法的对象
1.4 是否重复执行
2 对象的内存管理及销毁
2.1 使用方法" invalidate "进行停止
2.2 将对象设置为" nil "
2.3 特别是在返回到其他视图控制器的时候,要在方法" - (void)viewWillDisappear:
     (BOOL)animated "中(注意:不能在方法" - (void)dealloc 在设置)将timer停止,并设置为nil

// 有效释放
- (void)viewWillDisappear:(BOOL)animated
{
  [super viewWillDisappear:animated]; 

  [timer invalidate];
  timer = nil;
} 

// 无效释放
- (void)delloc
{
  [timer invalidate];
  timer = nil;
}

3 计时器启用关闭继续

3.1 开始:

timer.fireDate = [NSDate distantPast]; 

3.2 停止:

timer.fireDate = [NSDate distantFuture]; 

3.3 继续:

[timer setFireDate:[NSDate date]]; 

使用示例(倒计时):

三种实例化方法,级对应的停止方法

方法1

// 实例化方法1 初始化后即开始执行
if (self.timer == nil)
{
    self.time = 10.0;
    // 带参数
    NSNumber *number = @(self.time);
    self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(countDownTime:) userInfo:number repeats:YES];
    // 非必要设置,实际已设置为 NSDefaultRunLoopMode 模式
    [[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
}
// 关闭定时器方法1
[self.timer invalidate];
self.timer = nil;

方法2

// 实例化方法2 初始后化,需要调用" setFireDate "才开始执行
if (self.timer == nil)
{
    self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(countDownTime:) userInfo:nil repeats:YES];
    // 非必要设置,实际已设置为 NSDefaultRunLoopMode 模式
    [[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
    [self.timer setFireDate:[NSDate distantFuture]];
}
self.time = 10.0;
[self.timer setFireDate:[NSDate distantPast]];
// 关闭定时器方法2
[self.timer setFireDate:[NSDate distantFuture]]; 

方法3

// 实例化方法3 初始化后,需要调用" fire "才开始执行
if (self.timer == nil)
{
    self.timer = [NSTimer timerWithTimeInterval:1.0 target: self selector:@selector(countDownTime:) userInfo:nil repeats:YES];
    // 必须设置 NSRunLoop 线程池,否则无效
    [[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
}
self.time = 10.0;
[self.timer fire];
// 关闭定时器方法3
[self.timer invalidate];
self.timer = nil;

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站 的支持!

(0)

相关推荐

  • 解决ios端点击按钮闪烁问题(小tips)

    在ios端,safari浏览器上触发click事件有300ms的延迟相应,为touch添加的样式会和click冲突而出现闪烁问题 在safari中触摸事件的相应顺序如下: touchstart --> touchmove --> touchend --> click(300ms) 此时可试用以下样式取消click事件的默认样式来消除页面闪烁问题 *{ -webkit-tap-highlight-color:rgba(0,0,0,0); } (值得一提的是,300ms的延迟主要是用于判断用

  • IOS中UITextView或UITextField字数限制的实现

    IOS中UITextView或UITextField字数限制的实现 UITextView或UITextField字数限制,输入时的限制,复制粘贴时的限制 字数限制有三种方法 在代理方法 "- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string" 或 "- (BOOL)textView:

  • iOS如何为导航栏添加播放动画

    本文实例为大家分享了iOS为导航栏添加播放动画的具体代码,供大家参考,具体内容如下 FLAudioVisualizerView.h #import <UIKit/UIKit.h> @interface FLAudioVisualizerView : UIView #pragma mark - // 默认UIEdgeInsetsZero @property (nonatomic, assign) UIEdgeInsets contentInsets; // 默认为4 @property (non

  • 解决iOS11刷新tableview会出现漂移的现象

    首先要注意这只是在iOS11下会出现的bug,如果iOS10以及以下也有问题的情况不属于此列 问题的动图如下所示,如果要做每隔一段短时间就刷新一个section甚至整个tableview的操作的时候会出现闹鬼式的不断移动. 它真的是自己回去的~(限制动图2M真的有点烦) 解决方案 在初始化tableview的时候加上这几行 _tableview.estimatedRowHeight = 0; _tableview.estimatedSectionHeaderHeight = 0; _tablev

  • IOS开发仿微信右侧弹出视图实现

    IOS开发仿微信右侧弹出视图实现 微信首页的+号,点击之后会弹出一个更多的视图,这个视图如何实现呢? 实现该效果可能需要以下技术要点: 1.图片拉伸,通过拉伸图片的中间的较小区域来保持图片的边上的形状 2.仿射变换,用到仿射变换的缩放,平移和合并,视图动画 3.navigationBar的样式设置 实现效果,如下: 本Demo图片来源微信安装包解压得到的图片 实现代码: // // ViewController.m // appXX-微信更多工具栏 // // Created by MRBean

  • vue中axios处理http发送请求的示例(Post和get)

    本文介绍了vue中axios处理http发送请求的示例(Post和get),分享给大家,具体如下: axios中文文档 https://github.com/mzabriskie/axios#using-applicationx-www-form-urlencoded-format   axios文档 在处理http请求方面,已经不推荐使用vue-resource了,而是使用最新的axios,下面做一个简单的介绍. 安装 使用node npm install axios 使用cdn <scrip

  • IOS 中NSTimer定时器的使用

    IOS 中NSTimer定时器的使用 NSTimery 定时器,主要用于进行定时执行指定方法,常用场景如:获取验证码的按钮倒计时:图片轮播定时. 1 使用注意事项: 1.1 倒计时时间间隔(时间单位是秒) 1.2 指定的执行方法 1.3 实现指定执行方法的对象 1.4 是否重复执行 2 对象的内存管理及销毁 2.1 使用方法" invalidate "进行停止 2.2 将对象设置为" nil " 2.3 特别是在返回到其他视图控制器的时候,要在方法" -

  • iOS中几种定时器的实现小结

    在软件开发过程中,我们常常需要在某个时间后执行某个方法,或者是按照某个周期一直执行某个方法.在这个时候,我们就需要用到定时器. 然而,在iOS中有很多方法完成以上的任务,到底有多少种方法呢?经过查阅资料,大概有三种方法:NSTimer.CADisplayLink.GCD.接下来我就一一介绍它们的用法. 一.NSTimer 1. 创建方法 NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selecto

  • iOS中延时执行的几种方式比较及汇总

    前言 在开发过程中,我们有时会希望把一些操作封装起来延迟一段时间后再执行.本文列举了四种延时执行某函数的方法及其一些区别.假如延时1秒时间执行下面的方法. - (void)delayMethod { NSLog(@"execute"); } 1.performSelector方法 这是iOS中常用的一种延迟执行方法. //不带参数 [self performSelector:@selector(delayDo:) withObject:nil afterDelay:1.0f]; //带

  • iOS中使用schema协议调用APP和使用iframe打开APP的例子

    在iOS中,需要调起一个app可以使用schema协议,这是iOS原生支持的,并且因为iOS系统中都不能使用自己的浏览器内核,所以所有的浏览器都支持,这跟android生态不一样,android是可以自己搞内核的,但是iOS不行. 在iOS中提供了两种在浏览器中打开APP的方法:Smart App Banner和schema协议. Smart App Banner 即通过一个meta 标签,在标签上带上app的信息,和打开后的行为,例如:app-id之类的,代码形如: 复制代码 代码如下: <m

  • IOS中的webView加载HTML

    在日常开发中,我们为了效率会用到很多很多的WebView,比如在做某个明细页面的时候我们返回给你的可能是一个html字符串,我们就需要将当前字符串展示到webView上面,所以我们对HTML标签需要有一定的认识,下面我们来一起用html标签和JS写一个打地鼠游戏,这里我们主要讲解HTML标签的书写,只要如何和webView适配涉及到响应式布局我们下次讲解: 1.首先我们先新建一个html文件 2 完整html标签并且设置编码格式为UTF-8 3 在body里面增加十只老鼠图片,并且增加点击事件,

  • 使用scrollTop()解决IOS中输入法遮挡输入框问题

    经过测试,发现有的IOS浏览器上输入法会弹出遮挡输入框,网上很多都是介绍用以下方法 (function() { $('input').on('click', function () { var target = this; // 使用定时器是为了让输入框上滑时更加自然 setTimeout(function(){ target.scrollIntoView(true); },100); }); 但是由于本人对scrollIntoView的理解不够一直没有解决问题,后来用相同的思路使用scroll

  • iOS中UIAlertView3秒后消失的两种实现方法

    一,效果图. 二,代码. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. UIAlertView* alert = [[UIAlertView alloc]initWithTitle:nil message:@"此信息3秒后消失" delegate:nil cancelButtonTitle:nil ot

  • iOS中视频播放的基本方法总结

    前言 本文总结了iOS中最常见的视频播放方法,不同的方法都各具特点,我希望能够总结它们的不同,方便在开发中选择合适的技术方案. Apple为我们提供了多种方法来实现视频播放,包括MPMoviePlayerController,MPMoviePlayerViewController,AVPlayer,AVPlayerViewController等.而值得注意的是,上述的MPMoviePlayerController与MPMoviePlayerViewController在iOS9.0之后被弃用.虽

  • IOS 中CALayer绘制图片的实例详解

    IOS 中CALayer绘制图片的实例详解 CALayer渲染内容图层.与UIImageView相比,不具有事件响应功能,且UIImageView是管理内容. 注意事项:如何使用delegate对象执行代理方法进行绘制,切记需要将delegate设置为nil,否则会导致异常crash. CALayer绘制图片与线条效果图: 代码示例: CGPoint position = CGPointMake(160.0, 200.0); CGRect bounds = CGRectMake(0.0, 0.0

  • IOS 中CATextLayer绘制文本字符串

    IOS 中CATextLayer绘制文本字符串 CATextLayer使用Core Text进行绘制,渲染速度比使用Web Kit的UILable快很多.而且UILable主要是管理内容,而CATextLayer则是绘制内容. CATextLayer的绘制文本字符串的效果如下: 代码示例: // 绘制文本的图层 CATextLayer *layerText = [[CATextLayer alloc] init]; // 背景颜色 layerText.backgroundColor = [UIC

随机推荐