首页
技术博客
PHP教程
数据库技术
前端开发
HTML5
Nginx
php论坛
新用户注册
|
会员登录
PHP教程
技术博客
编程问答
PNG素材
编程语言
前端技术
Android
PHP教程
HTML5教程
数据库
Linux技术
Nginx技术
PHP安全
WebSerer
职场攻略
JavaScript
开放平台
业界资讯
大话程序猿
登录
极速注册
取消
热门标签 | HotTags
perl
tree
client
hashtable
iostream
require
cPlusPlus
config
hook
foreach
express
rsa
web
split
instance
default
join
frameworks
audio
substring
loops
ip
testing
export
get
callback
future
dagger
vbscript
less
request
php5
php
byte
httpclient
ascii
main
select
search
spring
shell
window
buffer
python2
utf-8
command
php8
actionscrip
erlang
flutter
usb
jar
format
web3
heatmap
replace
node.js
object
jsp
subset
scala
filter
eval
php7
netty
数组
tags
datetime
random
python
cpython
uml
bitmap
js
triggers
cmd
merge
post
range
当前位置:
开发笔记
>
编程语言
> 正文
cocos2dx之retain和release
作者:手机用户2502861125 | 来源:互联网 | 2023-10-10 16:58
1.关于cocos2d-x中的内存管理机制,有很多关于这方面的资料,本不想提起,但笔者这段时间练的一个消灭星星的游戏实现却遇到了相关的问题
1.关于cocos2d-x中的内存管理机制,有很多关于这方面的资料,本不想提起,但笔者这段时间练的一个消灭星星的游戏实现却遇到了相关的问题,简单介绍一下。用于管理点击遍历搜索后的星星对象的vector在取出对象后遇到了问题,取出的行列值出现了混乱,百思不得其解,后来发现这时候取出的sprite对象其实已经被销毁了,所以在加入vector时retain后解决了问题,但其实问题却不在于此。
2.具体原因其实也很简单,消灭星星对象时必须先清空表示星星数组中的标志位,然后才能removechild,否则自然找不到对象了,直接上代码。很明显是相当不合理,只要把第一句放到最后就好了。现在看来确实简单,不过当时查错的过程还是很麻烦的,一直没有注意到这一点。当然了体会自己发现问题,解决问题的过程是很享受的,特别是最后解决后的成就感。扯远了,总之一点点的进步,就能慢慢养成好的习惯,
3.还有一点,cocos2d-x中Vector也封装了对于对象的 retain 操作和 release 操作,因此对对象的生命周期有了很大影响,这也是大多数人所忽略的的地方,可以在源码中找到解释。
4.由此可见,这里的vector已经同c++中不同了,作了进一步的封装,push_back会自动间接调用retain,而最后调用clear清除数组导致引用减少,自然导致了对象销毁。
5.因此笔者专门查阅了相关引用计数相关的资料,其实sprite在创建之初就autorelease 过了,就会被内存管理机制盯上了,可以在源码处找到证明。
6.继承自 Cocos2d-x 的Object的子类都具有内存管理的一套方法,当需要继续持有对象时,就要及时调用retain增加引用计数,避免对象被销毁程序崩溃的尴尬。当然对于不需要的对象调用release减少计数。值得一提的是,调用addchild具有retain同样的效果,在对象被人认领之后当然就不会被销毁了,显而易见,其原理无非就是间接调用了retain。
7.总而言之,当遇到程序意外崩溃,中断后发现内存中对象数据很不正常的时候多半是对象被销毁了。此时注意调用retain的时机,保证对象在运行需要的期间正常存在,就能解决此类问题。
搜索
数组
push
object
写下你的评论吧 !
吐个槽吧,看都看了
会员登录
|
用户注册
推荐阅读
object
Redis底层数据结构之压缩列表的介绍及实现原理
本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ...
[详细]
蜡笔小新 2023-12-12 16:06:05
object
Java中vector的使用详解
本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ...
[详细]
蜡笔小新 2023-12-13 14:14:39
object
Proxy与Object.defineProperty优劣对比及其应用场景
本文主要对比了Proxy和Object.defineProperty两种对象属性操作方式的优劣,并介绍了它们各自的应用场景。Proxy具有直接监听对象和数组变化、多种拦截方法以及新标准的性能优势等特点,而Object.defineProperty则兼容性好,支持IE9,并且无法用polyfill磨平浏览器兼容性问题。根据具体需求和浏览器兼容性考虑,选择合适的方式进行对象属性操作。 ...
[详细]
蜡笔小新 2023-12-14 19:48:22
ip
JavaScript疑难杂症系列相称性推断的知识点详解
本文详细解析了JavaScript中相称性推断的知识点,包括严厉相称和宽松相称的区别,以及范例转换的规则。针对不同类型的范例值,如差别范例值、统一类的原始范例值和统一类的复合范例值,都给出了具体的比较方法。对于宽松相称的情况,也解释了原始范例值和对象之间的比较规则。通过本文的学习,读者可以更好地理解JavaScript中相称性推断的概念和应用。 ...
[详细]
蜡笔小新 2023-12-14 19:12:10
less
在类中定义数组时出错 - Error on defining arrays in class
Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ...
[详细]
蜡笔小新 2023-12-14 17:38:12
ip
C#学习教程:在Console中工作但在Windows窗体中不工作的异步代码分享
本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ...
[详细]
蜡笔小新 2023-12-14 15:56:00
get
Java容器中的compareto方法排序原理解析
本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ...
[详细]
蜡笔小新 2023-12-14 13:53:31
get
LeetCode笔记:剑指Offer 41. 数据流中的中位数(Java、堆、优先队列、知识点)
本文介绍了LeetCode剑指Offer 41题的解题思路和代码实现,主要涉及了Java中的优先队列和堆排序的知识点。优先队列是Queue接口的实现,可以对其中的元素进行排序,采用小顶堆的方式进行排序。本文还介绍了Java中queue的offer、poll、add、remove、element、peek等方法的区别和用法。 ...
[详细]
蜡笔小新 2023-12-14 13:34:58
get
Excel数据处理中的七个查询匹配函数详解
本文介绍了Excel数据处理中的七个查询匹配函数,以vlookup函数为例进行了详细讲解。通过示例和语法解释,说明了vlookup函数的用法和参数的含义,帮助读者更好地理解和运用查询匹配函数进行数据处理。 ...
[详细]
蜡笔小新 2023-12-14 10:15:09
get
Android JSON基础,音视频开发进阶指南目录
Array里面的对象数据是有序的,json字符串最外层是方括号的,方括号:[]解析jsonArray代码try{json字符串最外层是 ...
[详细]
蜡笔小新 2023-12-13 15:05:45
get
Vue项目中结合Element UI解决连续上传多张图片及图片编辑问题
本文介绍了在Vue项目中如何结合Element UI解决连续上传多张图片及图片编辑的问题。作者强调了在编码前要明确需求和所需要的结果,并详细描述了自己的代码实现过程。 ...
[详细]
蜡笔小新 2023-12-13 13:42:30
get
006_Redis的List数据类型
1.List类型是一个链表结构的集合,主要功能有push,pop,获取元素等。List类型是一个双端链表的结构,我们可以通过相关操作进行集合的头部或者尾部添加删除元素,List的设 ...
[详细]
蜡笔小新 2023-12-13 09:57:22
get
java命令运行
Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ...
[详细]
蜡笔小新 2023-12-12 19:26:55
default
HDFS2.x新特性
一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ...
[详细]
蜡笔小新 2023-12-13 13:52:40
web
WebSocket与Socket.io的理解
WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ...
[详细]
蜡笔小新 2023-12-12 19:35:15
手机用户2502861125
这个家伙很懒,什么也没留下!
Tags | 热门标签
perl
tree
client
hashtable
iostream
require
cPlusPlus
config
hook
foreach
express
rsa
web
split
instance
default
join
frameworks
audio
substring
loops
ip
testing
export
get
callback
future
dagger
vbscript
less
RankList | 热门文章
1
Mahout协同过滤算法源码分析(3-3)QR分解数据流
2
Canal 作为 消息中间件 实时消费MySQL中新增数据
3
单点登录 SSO 的前世今生
4
html响应式布局,左侧栏目固定,右侧内容随着屏幕宽度变化而变化
5
物联网毕设中的问题解决
6
mysql版本与php不一致,mysql 50前后版本差异
7
织梦DedeCMS专题模版{dede:field.note/}代码修改方法
8
VS2017搭建linux开发环境
9
比较 Java 中的两个 HashMap 对象
10
vuepress(四):修改主题样式
11
常用的一些英语俚语140条
12
怎么设置笔记本win10系统下AMD独立显卡?
13
开发笔记:(React)PNG图像将导入,但不会显示
14
python+pdf2docx+tkinter PDF转word小工具打包成exe
15
e.printStackTrace() 太多,造成微服务请求不通,nginx访问不
PHP1.CN | 中国最专业的PHP中文社区 |
DevBox开发工具箱
|
json解析格式化
|
PHP资讯
|
PHP教程
|
数据库技术
|
服务器技术
|
前端开发技术
|
PHP框架
|
开发工具
|
在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved |
京公网安备 11010802041100号
|
京ICP备19059560号-4
| PHP1.CN 第一PHP社区 版权所有