第一种:
用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是自己,回调是coCallerdisplayLink = [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 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 及定时器的使用相关推荐

  1. swift版QQ音乐播放器(二)

    一 完善部分的QQ音乐效果图 二 需要完善点 1 歌曲的切换和暂停播放 2 歌曲当前播放时间和歌曲总时间的更新 3 进度条的处理 4 歌手头像处理 5 头像动画效果 6 歌词的进度显示 8 完善细节 ...

  2. iOS-NSTimer的3种创建方式

    在iOS开发中,经常会用到定时器,iOS中常用的定时器有三种:NSTimer,CADisplayLink,GCD. 一.NSTimer创建定时器 // 创建定时器 方式1NSTimer *timer ...

  3. iOS-利用UIScrollView实现展示图片的无限滚动及自动滚动 - 郭晓

    1 // 2 // GXViewController.m 3 // 自动滚动及无线循环 4 // 5 // Created by 郭晓 on 14-3-7. 6 // Copyright (c) 20 ...

  4. iOS中的CADisplayLink定时器

    2019独角兽企业重金招聘Python工程师标准>>> iOS中的CADisplayLink定时器 说到定时器,在iOS中最常用的为NSTimer类,其实CADisplayLink类 ...

  5. iOS定时器-- NSTimer 和CADisplaylink

    iOS定时器-- NSTimer 和CADisplaylink 一.iOS中有两种不同的定时器: 1.  NSTimer(时间间隔可以任意设定,最小0.1ms)// If seconds is les ...

  6. NSTimer、CADisplayLink、GCD 三种定时器的用法 —— 昉

    在软件开发过程中,我们常常需要在某个时间后执行某个方法,或者是按照某个周期一直执行某个方法.在这个时候,我们就需要用到定时器. 在iOS中有很多方法完成定时器的任务,例如 NSTimer.CADisp ...

  7. 内存管理-定时器循环、内存布局、tagged pointer、weak指针、copy、自动释放池

    先上代码,我们平时用的定时器,cadisplaylink.nstimer,CADisplayLink.NSTimer会对target产生强引用,如果target又对它们产生强引用,那么就会引发循环引用 ...

  8. 浅析NSTimer CADisplayLink内存泄露

    偶得前言 本篇文章中我们主要谈谈NSTimer\CADisplayLink在使用过程中牵扯到内存泄露的相关问题及解决思路(文章末尾会附上Demo),有时候我们在不知情的情况容易入坑,最关键你还不知道自 ...

  9. CADisplayLink的简单使用

    CADisplayLink类似NSTimer是一个定时器,只不过是一秒会调用60次指定的方法 使用方法: #import "ViewController.h"@interface ...

最新文章

  1. 应有尽有!这可能是最全的 AI 面试笔记了
  2. PyQt5 图形界面-基础准备:安装Qt Creater、Qt Designer工具,使用Qt Designer设计界面,安装PyQt5工具库
  3. JAVA_OA(十四):SSM练手项目bug-JSP页面传递参数的编码问题
  4. python 文本向量化_Python文本特征抽取与向量化算法学习
  5. html5长按保存,iOS UIWebView仿微信H5页面实现长按保存图片功能
  6. 兼容ie浏览器的placeholder的几种方法
  7. python之路-SQLAlchemy
  8. 【工具】Xshell安装注册以及简单属性配置
  9. Github中文汉化插件—亲测可用
  10. 上海大华条码称代码_上海大华条码秤简易说明书
  11. Word空格自动加下划线
  12. 北京药监局考试计算机操作,考科一电脑操作
  13. c语言百分号-5.2f什么意思,c语言中的%d跟%5.2f有什么区别
  14. Hanlp词性对照表 中文词性对照表 英文词性对照表_CodingPark编程公园
  15. 如何做人群画像 如何做用户画像
  16. Xilinx SDx尝鲜之下载安装
  17. dede 修改首页默认访问路径/dede修改安装目录
  18. 阿里巴巴字体图标使用方法
  19. RDKit|摩根分子指纹计算、提取与可视化
  20. IE起始页被改为 http://www.537.com 的解决

热门文章

  1. 127.0.0.1和0.0.0.0地址的区别
  2. 那些承包欧美学生论文的肯尼亚人:平台抽成一半,学生工日薪200
  3. 清华博士接亲被要求现场写代码,新娘:提醒他吃饭的手艺不能忘!
  4. 算法战争:美国国家AI安全委员会要建立AI大学,「数字服务学院」为政府培养AI人才...
  5. 7天试学计划 | 人工智能核心能力课程招生
  6. 本科4篇顶会!清华特奖高天宇干货分享:我是这样写论文、做实验、与导师相处...
  7. 1470篇!CVPR2020结果出炉(附13篇论文链接/开源代码/解读)
  8. Django源码分析8:单元测试test命令浅析
  9. 基于Opencv实现眼睛控制鼠标
  10. OpenCV卡尔曼滤波介绍与代码演示