CADisplayLink 及定时器的使用
第一种:
用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; }
-(void) startMainLoop {// CCDirector::setAnimationInterval() is called, we should invalidate it first[displayLink invalidate];displayLink = nil;// displayLink是CADisplayLink对象,target是自己,回调是coCallerdisplayLink = [NSClassFromString(@"CADisplayLink") displayLinkWithTarget:self selector:@selector(doCaller:)];//看这个doCaller回调[displayLink setFrameInterval: self.interval];//设置帧率[displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];//添加到循环并启动 }
void CCDisplayLinkDirector::mainLoop(void) {if (m_bPurgeDirecotorInNextLoop){m_bPurgeDirecotorInNextLoop = false;purgeDirector();}else if (! m_bInvalid){drawScene();// draw the scene// release the objectsCCPoolManager::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;
转载于:https://www.cnblogs.com/yulang314/p/3826759.html
CADisplayLink 及定时器的使用相关推荐
- swift版QQ音乐播放器(二)
一 完善部分的QQ音乐效果图 二 需要完善点 1 歌曲的切换和暂停播放 2 歌曲当前播放时间和歌曲总时间的更新 3 进度条的处理 4 歌手头像处理 5 头像动画效果 6 歌词的进度显示 8 完善细节 ...
- iOS-NSTimer的3种创建方式
在iOS开发中,经常会用到定时器,iOS中常用的定时器有三种:NSTimer,CADisplayLink,GCD. 一.NSTimer创建定时器 // 创建定时器 方式1NSTimer *timer ...
- iOS-利用UIScrollView实现展示图片的无限滚动及自动滚动 - 郭晓
1 // 2 // GXViewController.m 3 // 自动滚动及无线循环 4 // 5 // Created by 郭晓 on 14-3-7. 6 // Copyright (c) 20 ...
- iOS中的CADisplayLink定时器
2019独角兽企业重金招聘Python工程师标准>>> iOS中的CADisplayLink定时器 说到定时器,在iOS中最常用的为NSTimer类,其实CADisplayLink类 ...
- iOS定时器-- NSTimer 和CADisplaylink
iOS定时器-- NSTimer 和CADisplaylink 一.iOS中有两种不同的定时器: 1. NSTimer(时间间隔可以任意设定,最小0.1ms)// If seconds is les ...
- NSTimer、CADisplayLink、GCD 三种定时器的用法 —— 昉
在软件开发过程中,我们常常需要在某个时间后执行某个方法,或者是按照某个周期一直执行某个方法.在这个时候,我们就需要用到定时器. 在iOS中有很多方法完成定时器的任务,例如 NSTimer.CADisp ...
- 内存管理-定时器循环、内存布局、tagged pointer、weak指针、copy、自动释放池
先上代码,我们平时用的定时器,cadisplaylink.nstimer,CADisplayLink.NSTimer会对target产生强引用,如果target又对它们产生强引用,那么就会引发循环引用 ...
- 浅析NSTimer CADisplayLink内存泄露
偶得前言 本篇文章中我们主要谈谈NSTimer\CADisplayLink在使用过程中牵扯到内存泄露的相关问题及解决思路(文章末尾会附上Demo),有时候我们在不知情的情况容易入坑,最关键你还不知道自 ...
- CADisplayLink的简单使用
CADisplayLink类似NSTimer是一个定时器,只不过是一秒会调用60次指定的方法 使用方法: #import "ViewController.h"@interface ...
最新文章
- 应有尽有!这可能是最全的 AI 面试笔记了
- PyQt5 图形界面-基础准备:安装Qt Creater、Qt Designer工具,使用Qt Designer设计界面,安装PyQt5工具库
- JAVA_OA(十四):SSM练手项目bug-JSP页面传递参数的编码问题
- python 文本向量化_Python文本特征抽取与向量化算法学习
- html5长按保存,iOS UIWebView仿微信H5页面实现长按保存图片功能
- 兼容ie浏览器的placeholder的几种方法
- python之路-SQLAlchemy
- 【工具】Xshell安装注册以及简单属性配置
- Github中文汉化插件—亲测可用
- 上海大华条码称代码_上海大华条码秤简易说明书
- Word空格自动加下划线
- 北京药监局考试计算机操作,考科一电脑操作
- c语言百分号-5.2f什么意思,c语言中的%d跟%5.2f有什么区别
- Hanlp词性对照表 中文词性对照表 英文词性对照表_CodingPark编程公园
- 如何做人群画像 如何做用户画像
- Xilinx SDx尝鲜之下载安装
- dede 修改首页默认访问路径/dede修改安装目录
- 阿里巴巴字体图标使用方法
- RDKit|摩根分子指纹计算、提取与可视化
- IE起始页被改为 http://www.537.com 的解决
热门文章
- 127.0.0.1和0.0.0.0地址的区别
- 那些承包欧美学生论文的肯尼亚人:平台抽成一半,学生工日薪200
- 清华博士接亲被要求现场写代码,新娘:提醒他吃饭的手艺不能忘!
- 算法战争:美国国家AI安全委员会要建立AI大学,「数字服务学院」为政府培养AI人才...
- 7天试学计划 | 人工智能核心能力课程招生
- 本科4篇顶会!清华特奖高天宇干货分享:我是这样写论文、做实验、与导师相处...
- 1470篇!CVPR2020结果出炉(附13篇论文链接/开源代码/解读)
- Django源码分析8:单元测试test命令浅析
- 基于Opencv实现眼睛控制鼠标
- OpenCV卡尔曼滤波介绍与代码演示