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 runloop与定时器的使用

runloop有五种工作模式 其中较为常用的是以下三种 kCFRunLoopDefaultMode--默认模式 UITrackingRunLoopMode--界面跟踪模式 NSRunLoop...

iOS中定时器NSTimer的使用

调用一次计时器方法: //不重复,只调用一次。timer运行一次就会自动停止运行 NSTimer * timer = [NSTimer scheduledTimerWithTimeInterva...

iOS中定时器NSTimer的使用

1、初始化 + (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelec...

IOS-41-NSTimer定时器的使用

今天做了一个“获取短信验证码”倒计时效果的按钮,应用了NSTimer,顺便也看一下UITextField中密码明文与密文的设置。看效果: 定时器实现代码:@interface TLDForgetPw...

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

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

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

我在工程中写了一个方法 - (void)timecount{     NSDate* date = [NSDate date];     NSDateFormatter *formatter =...

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

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

iOS中定时器的使用

定时器是开发中经常会接触的

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

//********************************************************************************* 定时器 NSTimer 和 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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