iOS-定时器的使用

原创 2016年08月29日 14:17:59

一、NSTimer的使用

- (void)createNSTimer
{
    // 调用创建方法后,target对象的计数器会加1,直到执行完毕,自动减1。如果是循环执行的话,就必须手动关闭,否则可以不执行释放方法
    // 必须进行停止 —— 释放 [_timer invalidate];
    // 自动把timer加入MainRunloop的NSDefaultRunLoopMode中
#if 0
    _GZDTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(Logs) userInfo:nil repeats:YES];
#endif
    // 这种方法需要手动添加到NSDefaultRunLoopMode runloop的运行循环中,否则无法运行
    _GZDTimer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(Logs01) userInfo:nil repeats:YES];
    [[NSRunLoop mainRunLoop] addTimer:_GZDTimer forMode:NSDefaultRunLoopMode];
}
- (void)Logs
{
    NSLog(@"NSTimer 自动运行循环  >>>>>>>");
}
- (void)Logs01
{
    NSLog(@"NSTimer 手动运行循环  >>>>>>>");
}

二、CADisplayLink的使用

// 使用CADisplayLink需要记得停止定时器,停止的方法
    // 停止displayLink的定时器
    //[self.displayLink invalidate];
    //self.displayLink = nil;

- (void)createCADisplayLink
{
    self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(GZDDisplayLink)];
    // NSInteger类型的值,用来设置间隔多少帧调用一次selector方法,默认值是1,即每帧都调用一次。
    
    // readOnly的CFTimeInterval值,表示两次屏幕刷新之间的时间间隔。需要注意的是,该属性在target的selector被首次调用以后才会被赋值。selector的调用间隔时间计算方式是:调用间隔时间 = duration × frameInterval。
    
    /**当把CADisplayLink对象add到runloop中后,selector就能被周期性调用,类似于重复的NSTimer被启动了;执行invalidate操作时,CADisplayLink对象就会从runloop中移除,selector调用也随即停止,类似于NSTimer的invalidate方法。**/
    [self.displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
}
- (void)GZDDisplayLink
{
    NSLog(@"GZDDisplayLink >>>>>>> ");
}

三、GCD

- (void)createGCD
{
    /**
     *  只执行一次
     */
#if 0
    double delayInSeconds = 2.0;//两秒后,执行一次
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
            //执行事件
        NSLog(@"只执行一次>>>>>>>");
        });
#endif
    
    NSTimeInterval timerInterval = 1.0; //设置时间间隔
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    // _timer必须为全局变量
    _timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
    dispatch_source_set_timer(_timer, dispatch_walltime(NULL, 0), timerInterval * NSEC_PER_SEC, 0); //每秒执行
    dispatch_source_set_event_handler(_timer, ^{
        //在这里执行事件
        NSLog(@"GCD -----  1s执行一次  >>>>>>>");
    });
    dispatch_resume(_timer);
}

详细的源码可以去我的github下载参考
https://github.com/daniel1214/160829-TimeUser

版权声明:本文为博主原创文章,未经博主允许不得转载。

IOS中常用的定时器有三种

iOS开发中定时器经常会用到,iOS中常用的定时器有三种,分别是NSTime,CADisplayLink和GCD。 NSTimer 方式1     // 创建定时器     NSTimer ...
  • SpringJustin
  • SpringJustin
  • 2016年03月25日 12:59
  • 6800

iOS经典讲解之NSTimer、CADisplayLink、GCD三种定时器的使用

作者:Loving_iOS 转载请标明出处:http://blog.csdn.net/loving_ios/article/details/50800992 在应用开发过程中,会遇到很多需要循环执行或...
  • Loving_iOS
  • Loving_iOS
  • 2016年03月04日 11:17
  • 3483

[iOS]各种定时器--最全的定时器使用

说到定时器, 我们使用最多的就是NSTimer 和 GCD 了, 还有另外一个高级的定时器 CADisplayLink;一. NSTimerNSTimer的初始化方法有以下几种: 会自动启动, 并加...
  • lqq200912408
  • lqq200912408
  • 2017年01月01日 00:00
  • 2373

ios使用定时器模拟下载的效果

  • 2016年01月14日 16:48
  • 61KB
  • 下载

iOS中定时器NSTimer的使用

1、初始化 + (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSel...
  • yuanya
  • yuanya
  • 2013年07月29日 10:17
  • 693

iOS 定时器的使用以及注意事项

我在工程中写了一个方法 - (void)timecount{     NSDate* date = [NSDate date];     NSDateFormatter *formatter =...
  • iOSbird
  • iOSbird
  • 2017年07月30日 02:23
  • 600

ArcGIS Runtime SDK for iOS(二) ---使用定时器绘制由point组成的polyLine,并显示位置坐标

ArcGIS Runtime for iOS(二) ---使用定时器绘制由point组成的polyLine,并显示位置坐标。...
  • sinat_32375119
  • sinat_32375119
  • 2016年04月14日 15:23
  • 938

iOS经典讲解之NSTimer、CADisplayLink、GCD三种定时器的使用

作者:Loving_iOS 转载请标明出处:http://blog.csdn.net/loving_ios/article/details/50800992 在应用开发过程中,会遇到很多需要循环执行或...
  • Loving_iOS
  • Loving_iOS
  • 2016年03月04日 11:17
  • 3483

IOS学习之—— 定时器 NSTimer 和 CADisplayLink 类的使用

//********************************************************************************* 定时器 NSTimer 和 ...
  • TenMios
  • TenMios
  • 2016年03月30日 19:06
  • 353

iOS-定时器的使用NSTimer

在iOS开始中,我们会使用到一些定时器来帮我们实现一个定时操作的效果,这个时候我们就可以使用NSTimer这个类来实现该效果。 举一个案例,图片轮播器,一般会在一些网购的APP使用该效果来轮循播放广...
  • zmj132113
  • zmj132113
  • 2016年01月11日 19:18
  • 143
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS-定时器的使用
举报原因:
原因补充:

(最多只允许输入30个字)