中级篇第十一期:计时器的使用

在这里主要介绍三种计时器吧,毕竟用的情况不是很多

首先是NSTimer

 
    NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timeUp) userInfo:nil repeats:YES];
    //解决timer方法延迟调用的情况
    [[NSRunLoop mainRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];

然后是CADisplayLink

 
    CADisplayLink *cadisplayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(timeUp)];
    cadisplayLink.frameInterval = 60;
    [cadisplayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
    [cadisplayLink invalidate];

最后是GCD的dispatch_source_t

 
    //只执行一次
    double delayInSeconds = 2.0;
    __weak ViewController *weakSelf = self;
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        [weakSelf timeUp];
    });
    
    //重复执行
    __block int timeout = 30;
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    dispatch_source_t _timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
    dispatch_source_set_timer(_timer, dispatch_walltime(NULL, 0), 1.0*NSEC_PER_SEC, 0); //每秒执行
    dispatch_source_set_event_handler(_timer, ^{
        if(timeout <= 0) { //倒计时结束,关闭
            dispatch_source_cancel(_timer);
            dispatch_async(dispatch_get_main_queue(), ^{
                NSLog(@"时间到,结束调用");
            });
        }else{
            int seconds = timeout % 60;
            NSString *strTime = [NSString stringWithFormat:@"%.2d", seconds];
            dispatch_async(dispatch_get_main_queue(), ^{
                //设置界面的按钮显示 根据自己需求设置
                NSLog(@"%@",strTime);
            });
            timeout--;
        }
    });
    dispatch_resume(_timer);

好啦,以上几种就是我们在iOS开发中常用的计时器了哦,小伙伴们可以自己试试哦,还是蛮好用的

时间: 2024-11-11 10:49:14

中级篇第十一期:计时器的使用的相关文章

初级篇第十一期:学习使用常量定义和宏定义

学习建议:自己动手,丰衣足食 学习周期:1周 学习目的:熟练使用常量定义和宏定义 学习答疑:欢迎来技术群里提问并做分享 学习工具:Xcode开发环境 学习内容:熟悉项目开发中常用的两个定义 我们一般定义常量数字和字符串的时候一般会考虑用常量来定义   static CGFloat const kDefaultColorLayerOpacity = 0.4f; 一般定义宏的时候,都是用来定义方法,用宏的时候一定要多注意使用哦,会关系到括号的问题   #define SWH_RGBA(r, g, b

进阶篇第十一期:高德地图的使用

不知道小伙伴们有木有用高德的API来玩高德地图,其实还好啦,API里面介绍的很详细了哦,那么我今天就介绍一些常用的吧 首先是导入SDK,我用的是2D地图,所以就导入两个2D的库,那么我用CocoaPod来管理   pod 'AMap2DMap' pod 'AMapSearch' 接下来我们在调用地图的Controller里面来导入需要用的类库,并且关联对应的delegate   #import <MAMapKit/MAMapKit.h> #import <AMapSearchKit/AM

经验篇第十一期:群里的那点事儿(十一)

由于最近群里面小伙伴们研究的问题,在之前基本都已经研究过了,所以本期就没有记录新的问题,希望群里的小伙伴们可以多来提问与解答哦

中级篇第十期:UIImage的处理

在我们开发过程中,经常会遇到对UIImage的处理,那么在这里简单介绍几种常用的吧,我一般把它们统一写在UIImage的Category中 首先是对图片的压缩处理   - (UIImage *)scaledImageWithSize:(CGSize)size {     UIGraphicsBeginImageContextWithOptions(size, NO, 0.0);     [self drawInRect:CGRectMake(0, 0, size.width, size.heig

娱乐篇第十一期:互联网的事情you意思(十一)

优酷土豆一季度净营收同比增长47% 迅雷净利润同比下滑48% 说好的Apple Pay终于来了,苹果将与阿里巴巴在移动支付领域进行合作: 快车和顺风车之后,滴滴即将上线公共交通业务,卖车服务也在路上: 360与任志强的华远集团合作推安全智能家居: 马云.史玉柱控制公司抵押出华数传媒20%的股份.

随心篇第十一期:想念大学里的小伙伴们

毕业到现在快一年了哦,不知道咱们班的小伙伴们这一年里过的都怎么样,也不知道大家还记不记得咱们这些同学们 每次我跟在北京的同学聚聚聊天的时候,都会从每一个同学聊起,怀念我们在大学里发生过的那些开心的事情,也会聊一些那时候不成熟的我们,做过的那些不成熟的事情 怀念大学里小伙伴们见证彼此成长的那段日子-- 参加工作以后,身边的小伙伴们并没有大学的同学们那么好相处,也许是因为环境变了,利益的诱惑力可能会比我们预期的还要强悍:又或者是大家都是有目的的去交友,而不是真心真意的去交朋友吧,除了参加跟公司有关的

Canvas画图之中级篇

前段时间介绍了canvas画图的初级篇,今天接着介绍中级篇了... 一.绘制形状 绘制图形不仅仅是利用线条来实现绘图, 还可以有快捷的绘制图形的办法 1.绘制矩形 2.绘制圆弧 1 绘制矩形 绘制矩形的方法 CanvasRenderingContext2D.strokeRect CanvasRenderingContext2D.fillRect CanvasRenderingContext2D.rect 注意: rect 方法就是矩形路径, 还需要使用 fill 或 stroke 才可以看到效果

PHP注入大全,分低级篇,中级篇,高级篇

谨以此献给黑客x档案的新手们 前言:现在的网络,最流行的攻击手段有两种,一种是缓冲区溢出攻击,一种是SQL注入,相对而言,最流行的还是脚本注入,而脚本注入漏洞更是风靡黑客界.不管是老鸟还是新起步的小菜,都会为它那巨大的威力和灵活多变的招式所着迷! 正是因为注入攻击的流行,使的市面上的注入工具层出不穷!比较出名的有小竹的NBSI.教主的HDSI和啊D的注入工具等等!这大大方便的小菜们掌握注入漏洞!可是,工具是死的,注入的手法却是活的,能否根据实际情况灵活地构造SQL注入语句,得到自己想要的信息,是

平安科技移动开发二队技术周报(第十一期)

平安科技移动开发二队技术周报(第十一期) 业界新闻 1)黑莓谷歌合作研发"企业版"安卓 黑莓公司拥抱安卓生态的速度之快,令人惊讶.黑莓年内推出安卓手机基本是板上钉钉,而日前,黑莓公开宣布,已经和谷歌建立了伙伴关系,将为企业用户定制出更加安全的安卓版本号. 2)Google 收购 Android 十周年.多图看 Android 十年间的变迁 北京时间7月11号晚上 8 点多.和安迪·鲁宾一起开发 Android 的搭档.现在的 Google Ventures 合伙人 Rich Miner