iOS 开发之定时器

iOS开发:浅谈子线程中添加定时器 ##目标 开启一个子线程,并添加一个定时器,在进入界面时启动定时器,在退出界面时销毁定时器。 ##demo地址 https://github.com/pengwj/blogWork/tree/master/code/TimerTest ##注意点 1、定时器默认添加在NSDefaultRunLoopMode,界面滑动时会导致定时器停止执行。 2、子线程中RunLoop默认不启动,所以需要往里面添加... 阅读详情
第一种:
用CADisplayLink可以实现不停重绘。
例子:

CADisplayLink* gameTimer;

gameTimer = [CADisplayLink displayLinkWithTarget:self

                                            selector:@selector(updateDisplay:)];

[gameTimer addToRunLoop:[NSRunLoop currentRunLoop]

                    forMode:NSDefaultRunLoopMode];


第二种:
int CCApplication::run()
{
    if (applicationDidFinishLaunching()) 
    {
        [[CCDirectorCaller sharedDirectorCaller] startMainLoop];//主循环开始
    }
    return 0;
}


继续跟进startMainLoop函数

-(void) startMainLoop
{
        // CCDirector::setAnimationInterval() is called, we should invalidate it first
        [displayLink invalidate];
        displayLink = nil;
        // displayLink是CADisplayLink对象,target是自己,回调是coCaller
        displayLink = [NSClassFromString(@"CADisplayLink") displayLinkWithTarget:self selector:@selector(doCaller:)];//看这个doCaller回调
        [displayLink setFrameInterval: self.interval];//设置帧率
        [displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];//添加到循环并启动
}

看doCaller回调,

void CCDisplayLinkDirector::mainLoop(void)
{
    if (m_bPurgeDirecotorInNextLoop)
    {
        m_bPurgeDirecotorInNextLoop = false;
        purgeDirector();
    }
    else if (! m_bInvalid)
     {
         drawScene();// draw the scene
     
         // release the objects
         CCPoolManager::sharedPoolManager()->pop();        
     }
}

好,一个循环完了。最后看到CCPoolManager::sharedPoolManager()->pop();就是用来释放对象的。


第三种:

IOS--NSTimer和CADisplayLink的用法  

    NSTimer初始化器接受调用方法逻辑之间的间隔作为它的其中一个参数,预设一秒执行30次。CADisplayLink默认每秒运行60次,通过它的frameInterval属性改变每秒运行帧数,如设置为2,意味CADisplayLink每隔一帧运行一次,有效的逻辑每秒运行30次。

        此外,NSTimer接受另一个参数是否重复,而把CADisplayLink设置为重复(默认重复?)直到它失效。

        还有一个区别在于,NSTimer一旦初始化它就开始运行,而CADisplayLink需要将显示链接添加到一个运行循环中,即用于处理系统事件的一个Cocoa Touch结构。

        NSTimer 我们通常会用在背景计算,更新一些数值资料,而如果牵涉到画面的更新,动画过程的演变,我们通常会用CADisplayLink。


但是要使用CADisplayLink,需要加入QuartzCore.framework及#import <QuartzCore/CADisplayLink.h>


NSTimer

@interface ViewController : UIViewController

{

    NSTimer *theTimer; //声明

}

//使用

float theInterval = 1.0 / 30.0f;  //每秒调用30次

theTimer = [NSTimer scheduledTimerWithTimeInterval:theInterval target:self selector:@selector(MyTask) userInfo:nil repeats:YES];

//停用

[theTimer invalidate];

theTimer = nil;


CADisplayLink,需要加入QuartzCore.framework及#import <QuartzCore/CADisplayLink.h>

/*CADisplayLink 默认每秒运行60次,将它的frameInterval属性设置为2,意味CADisplayLink每隔一帧运行一次,有效的使游戏逻辑每秒运行30次*/

    if(theTimer == nil)

    {

        theTimer = [CADisplayLink displayLinkWithTarget:self selector:@selector(MyTask)];

        theTimer.frameInterval = 2;

        [theTimer addToRunLoop: [NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];

    }

//停用

[theTimer invalidate];

theTimer = nil;

(详细教程)opencv+pycharm+笔记本摄像头 做一个人脸识别 文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结 一、安装opencv-python 这里推荐使用pycharm直接安装opencv-python 打开文件——设置——python解释器——点击+号 搜索opencv-python,点击安装包,等待片刻即可安装好 检查是否安装好,新建一个项目输入以下代码,若无报错则安装好 import cv2 二、准备分类器 咱们使用opencv官方提供的分类器,包括面部识别,侧... 阅读详情

相关推荐

SVM-支持向量机学习(1):线性可分SVM的基本型

1. foreword先看的是李航老师的书第7章,比较传统按照以下三节展开: 线性可分SVM 线性SVM 非线性SVM SMO算法 李航老师讲东西向来不拖泥带水,但本节也几乎用了40页的篇幅,足见涉及内容之多。7月底硬着头皮啃了下来,边看边在笔记上摘抄标注,花了2天时间对SVM有了基本认识。一个月过去了,如今重新整理为博客,再看轻松许多,并不断对比西瓜书的内容,启望达到融会贯通。西瓜书此节明显节奏轻

鸟恋旧林的博客 8679

CADisplayLink前世今生

本文字数:19803字预计阅读时间:50分钟用最通俗的语言,描述最难懂的技术前情描述上周同事做code review的时候说到了CADisplayLink的一些变化,感触颇深,提到了接口的一些变动,现在就自己的一些理解加上网上文档的查阅对该对象进行以下的说明:测试环境编译环境:Xcode 13.1运行设备:iPhone X,iOS 14.7.1,iPhone 13 Pro,iOS 15.5前情描述...

SOHU_TECH的博客 2342

解决Windows无法卸载补丁的实用方法

无法卸载Windows补丁可能是一个棘手的问题,但通过上述方法,你应该能够找到解决方案。无论是通过控制面板、命令提示符还是手动重置Windows更新组件,都有可能成功卸载问题补丁。如果所有方法都无效,系统还原将是一个值得尝试的备选方案。希望这篇文章能帮助你解决无法卸载补丁的问题。

mmoo_python的博客 1万+

iOS中几种定时器

一、NSTimer 1. 创建方法NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(action:) userInfo:nil repeats:NO];*TimerInterval : 执行之前等待的时间。比如设置成1.0,就代表1秒后执行方法 target :

风继续吹 679

Zemax显微镜设计:从物镜到目镜的完整光学系统优化

本文详细介绍了使用Zemax进行显微镜光学系统设计的完整流程,从物镜到目镜的优化技巧。通过实战案例和关键参数设置,帮助读者掌握数值孔径、视场角等核心概念,实现高分辨率显微镜设计。文章特别强调了系统级优化和公差分析的重要性,为科研和工业检测提供可靠的光学解决方案。

weixin_42549451的博客 436

从安装到跑通第一个例程:Halcon 20.11深度学习版环境搭建全记录

本文详细记录了Halcon 20.11深度学习版环境搭建的全过程,从安装配置到运行第一个例程,特别针对CUDA版本冲突、算子验证和样本数据预处理等常见问题提供解决方案。通过实战案例展示PCB缺陷分类流程,帮助工程师快速掌握工业级图像处理技术,提升深度学习模型在工业质检中的应用效率。

weixin_28739079的博客 220

iOS基础---定时器:GCD、NSTimer、CADisplayLink

Dispatch Source 是 Grand Central Dispatch (GCD) 提供的一种数据结构,用于监控来自系统和应用程序的各种类型的异步事件。这些事件包括文件描述符活动、信号、定时器事件等。通过 Dispatch Source,开发者可以在特定事件发生时执行代码,而无需创建复杂的回调机制或者使用多线程轮询。

m0_61227789的博客 1864

基于Django+Vue3的目标检测系统设计与实现,Web前后端分离,Vue3前台系统+Django后台管理系统开发,YOLOv11 Web目标检测,实现图片、视频和摄像头检测等功能,全网独发

基于Django+Vue3的智能目标检测系统设计与实现,Web前后端分离,YOLOv11 Web目标检测,Vue3前台系统+Django后台管理系统开发,实现图片检测、视频检测、摄像头检测、登录、注册和个人中心功能

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 3667

ios-CADisplayLink

CADisplayLink是一种以屏幕刷新频率触发的时钟机制,每秒钟执行大约60次。 CADisplayLink是一个计时器,可以使绘图代码和视图的刷新频率保持同步,而NSTimer是无法确保计时器实际为触发的准确的时间的。 用法如下 //创建 CADisplayLink * link=[CADisplayLink displayLinkWithTarget:self selector:

rv0p111 458

openclaw本地模型对接

使用是官方推荐的一种集成方式,它可以简化配置过程。但由于您的系统环境和之前复杂的配置历史,我为您梳理了一个核心流程,并增加了关键的“事后检查”步骤,以确保能从根本上解决问题。

suny8的专栏 2460

【专栏导引贴】100+智能优化算法:从背景原理到代码实战(持续更新)

本专栏系统整理100+种现代优化算法,涵盖粒子群优化(PSO)、遗传算法(GA)、鲸鱼优化(WOA)等经典方法,以及白鲸优化(BWO)、非洲秃鹫优化(AVOA)等新兴算法。每篇详解包含生物启发原理、数学模型、代码实现及工程应用,采用统一编程风格,提供可直接运行的实例代码。专栏持续更新,旨在为研究者提供系统化的智能优化算法参考资料,实现从理论到实践的完整知识链。目前已收录23种算法,包括蚁群系统(ACS)、蝙蝠算法(BA)、天牛须搜索(BAS)等自然启发式优化方法。

qq_42212808的博客 3647

CADisplayLink的使用,显示屏幕帧数

在开发中我们经常会遇到使用计时器的情况,例如图片轮播,进度条的绘制等就是比较常见的应用场景. 常用的计时器有CADisplayLink和NSTimer,这篇文章来讲解下CADisplayLink的具体用法和注意事项 CADisplayLink概括 CADisplayLink是用于同步屏幕刷新频率的计时器,当屏幕刷新的时候就会调用对应的sel,所以不需要在设置间隔时间了. CADisplayL...

gcs的博客 3302

EUV光源技术路线深度解析

EUV光刻技术的关键瓶颈在于13.5纳米光源的稳定高效获取。主流技术路线从DPP放电等离子体发展为LPP激光等离子体方案,后者通过激光轰击锡液滴实现更高功率输出。新出现的LDP技术综合激光预热与放电优势,虽功率扩展性有限,但为光源技术提供了有益补充。目前LPP仍是唯一通过量产验证的方案,而LDP可能作为过渡技术应用于特定场景。EUV光源的发展实质是能量转化效率与系统可靠性的持续优化过程,各种技术路线的探索共同推动着这一核心工艺的进步。

硬核科技 556

IOS开发定时器

写在前头 在开发过程中,总是会遇到这样的需求:循环更新、处理,延时处理等事件。在这里总结了一些常用的延时和按时更新的用法 dispatch_after dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ ...

阿飞小伙子_博客 950

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

iOS开发,定时器的使用

在iOS开发中,我们可以通过三种途径来实现定时调用某一个方法的功能。为了简便期间,我直接在Xcode中写代码以及注释。 首先我们定义一个被定时执行的方法 - (void)reloop { NSLog(@"循环执行"); } 下边我们分别讨论这三种方法 1、使用NSTimer // 1、使用nstimer创建定时器 // A.自动加入主循环 NSTimer *ti

smile全政的专栏 1222

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

iOS开发中创建定时器

应用场景: 1.轮播图(轮播图上的图片定时轮播) 2.跑秒按钮(点击获取验证码之后,按钮上的秒数进行倒计时) 创建定时器的方式: 1.利用NSTimer 2.利用GCD中的dispatch_source_t 代码: 利用NSTimer创建定时器的代码: 方式一: (void)startTimer { self.timer = [NSTimer timerWithTimeI...

梁森的博客 454

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

iOS开发的三种定时器

一、NSTimer - (instancetype)initWithFireDate:(NSDate *)date interval:(NSTimeInterval)ti target:(id)t selector:(SEL)s

sinat_22890109的博客 1383

iOS开发 • 实例——Hey, 定时器!

在现在很多app中,我们经常会看到轮播图,轮播广告等等,比如淘宝、京东商城app,他们都可以定时循环地播放广告、图片,背后的功臣之一就是今天的主角——定时器 NSTimer。 简单地介绍了它的应用场景,接下来,说说此次要分享的技能点: 定时器的常用方式 fire方法的正确理解 NSRunloopMode对定时器的影响 子线程开启定时器 GCD定时器 定时器引起的循环引用的解决思路 ##...

Homezzh的博客 290

iOS中的三大定时器 iOS开发中定时器经常会用到,iOS中常用的定时器有三种,分别是NSTime,CADisplayLink和GCD。

iOS中的三大定时器 iOS开发中定时器经常会用到,iOS中常用的定时器有三种,分别是NSTime,CADisplayLink和GCD。 NSTimer 方式1 // 创建定时器 NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(te

wakice的博客 1770

iOS开发 开启定时器,界面内存释放不了

今天在测试项目的时候无意间发现,开启定时器的界面内存竟然释放不了。点击导航返回上一级界面之后,dealloc 方法不走,而且定时器还在走。后来发现,开启定时器的时候界面内存释放不了。 //开启定时器 - (void)viewWillAppear:(BOOL)animated{     [super viewWillDisappear:animated];     [v

pyf_1993的博客 2142

iOS 定时器开发详情

目录 概述 NSTimer performSelector GCD timer CADisplayLink 一、概述   在平时的开发任务中,定时器是我们常用的技术。这一节我们来学习iOS怎么使用定时器。   在iOS中用一个timer对象来表示一个定时器,这个timer对象必须关联到一个runloop对象才能够正常运行。也就是说,r...

weixin_34198797的博客 116

IOS,H5混合开发,setTimeout定时器失效

项目中有需要定时请求服务器,来刷新用户新消息汇总的功能.没有使用第三方推送,暂时用app定时刷新来权宜实现. 安卓版本中使用的Hbuilder开发,使用是全部都是h5页面,不论当前是否是请求服务器的页面,该页面中的setTimeout方法都一直执行.但是在IOS中,如果当前页面不是定时器所在的页面,那么定时器就会失效.是因为离开该页面之后,该页面所在的webview就会销毁.附带说明,IOS混合

yunzhonghefei的博客 7514

GCD定时器 (IOS开发)

GCD定时器 Dispatch Source Timer 是一种与 Dispatch Queue 结合使用的定时器。当需要在后台 queue 中定期执行任务的时候,使用 Dispatch Source Timer 要比使用 NSTimer 更加自然,也更加高效(无需在 main queue 和后台 queue 之前切换)。 (页面的倒计时功能,直接按照代码示例进行 就很OK) 代码示例如下: @property (nonatomic, strong) dispatch_source_t timer;/

hong1595的专栏 2386

IOS开发——NSTimer定时器

IOS开发——NSTimer定时器 正做一个音乐播放器,需要一个定时功能,于是就弄了下: #import "WASharedTimer.h" static WASharedTimer *sharedTimerClass; static NSTimer *sharedTimer; @implementation WASharedTimer //单例初始化 +(voi

Gamin 1558

iOS开发之定时器与计时器

iOS开发之定时器与计时器

YouAreUmbrella的博客 538

IOS开发 NSTimer 定时器用法总结

NSTimer在IOS开发中会经常用到,尤其是小型游戏,然而对于初学者时常会注意不到其中的内存释放问题,将其基本用法总结如下: 一、初始化方法:有五种初始化方法,分别是 + (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti invocation:(NSInvocation *)invocation repeats:(BOOL)yesOrNo

tiebanshao的博客 378
上一篇: 百度2014研发类校招笔试题分析
下一篇: iOS之loadView/viewDidLoad/initWithNibName/awakeFromNib/initWithCoder的使用
Shicuf
博客等级 码龄16年 11粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值