因为功能和接口和objective-c版本的差不多,所以在内存管理上也采用objective-c引用计数的机制来实现内存管理。仔细看了一下cocos2d-x的源代码,确实写的很好,代码组织得很工整。它们所有类都是继承自CCObject, CCObject有retain(), release()和autorelease()等方法,和objective-c上的NSObject用法一致。每当CCObject对象初始化时它的引用计数reference-count为1, 调用retain()方法reference-count加1, 调用release()方法reference-count减1,当reference-count为0时释放该对象内存。autorelease()方法的作用是对象放进CCAutoreleasePool中进行管理,每当一次绘图结束后,CCPoolManager会对当前的内存池每个对象调用release()方法,一些reference-count为0的对象就会被内存释放。

每当通过new, copy方法获取一个对象时,都有义务在不用它的时候调用release()方法,如果我们是从其他方法中(例如静态方法)就不要调用release()方法,除非之前调用了retain()方法来表示要拥有这个对象一段时间。自定义每个类里的成员变量如果是继承自CCObject,在赋新值之前要先对新值retain(), 然后对旧值release(),这两个步骤不能省去或者调转。定义方法要返回一个对象时,如果该对象是在方法里通过new, copy来新建的,在返回该对象之前要调用autorelease()方法,例如很多类的静态方法返回它的实例时,都已经调用了autorelease()方法。

只要严格遵守以上规范,内存泄漏的问题应该是可以避免的,以后写c++程序时候,即使没有使用cocos2d-x, 都可以考虑引入通过引用计数来管理内存这一套机制,既简单又有效。

转载于:https://blog.51cto.com/charles8864/1304576

cocos2d-x和objective-c中的retain()和release()相关推荐

  1. retain和release 的使用

    之前在做打飞机项目的时候,用数组来保存敌人对象,在使用数组的时候需要retain,不是很明白,下面的内容,说明了这个问题!cocos2dx 在每一帧都会检测cocos2dx对象是否需要自动释放,也就是 ...

  2. Objective C 中的nil,Nil,NULL和NSNull理解

    kenyo网友的原创说法是:做IOS开发的估计都对Objective-C的内存管理机制很头疼,一不小心程序就会出内存泄露,我也不例外,前几天被指针的置nil与release给搞惨了,今和大家详细解说一 ...

  3. objective c中的nil,Nil

    nil用法 Objective-C中nil nil nil和C语言的NULL相同,在objc/objc.h中定义.nil表示一个Objctive-C对象,这个对象的指针指向空(没有东西就是空). Ni ...

  4. Objective C中@protected等关键字概述

    关于变量的作用域 @protected -Methods defined in the class and any subclasses can directly access the instanc ...

  5. 如何在Objective C中声明Block?

    本文翻译自http://fuckingblocksyntax.com/ 作为局部变量: returnType(^blockName)(parameterTypes) = ^returnType(par ...

  6. 在Objective C中定义私有的成员变量

    使用了LLVM以后,终于可以定义私有的成员变量了. @interface RadioViewController () { @privateUIBackgroundTaskIdentifier tas ...

  7. Objective-C 内存管理retain和release

    OC使用引用计数来管理内存,每个继承NSObject的对象,内部都维护了一个引用计数器retainCount.当对象创建时(调用alloc或者new)引用计数器会+1, 手动调用retain()方法能 ...

  8. 关于VS中区分debug与release,32位与64位编译的宏定义

    在vs编程中,常常涉及到32位和64位程序的编译,怎么判断当前编译是32位编译还是64位编译?如何判断 是debug下编译还是release下编译?因为之前用到,这里记录一下,省的忘了又要疯狂的goo ...

  9. VMware中安装CentOS Linux release 7.4.1708 (Core)

    本篇文章主要介绍了VMware安装Centos7超详细过程(图文),具有一定的参考价值,感兴趣的小伙伴们可以参考一下 1.软硬件准备 软件:推荐使用VMwear,我用的是VMwear 12 镜像:Ce ...

最新文章

  1. Mysql高级调优篇——第三章:Sql实战调优场景剖析(上)
  2. Firebug 1.7正式版发布,支持Firefox 4
  3. 不安全的发布 java_如何在没有安全警告的情况下发布Java Web S...
  4. 我新买的红米手机,新浪和360浏览器都能进,也能看电视,就是不能上手机QQ和微信...
  5. linux 从光盘安装数据,LINUX访问光盘数据
  6. 个人永久性免费-Excel催化剂插件功能修复与更新汇总篇之七
  7. Elastic-Job
  8. Golang的cookie
  9. 中文拼写纠错_58搜索拼写纠错
  10. Linux yum安装
  11. ​「5G消息」的最新消息
  12. 射频信号采集记录回放系统
  13. python-爬取贴吧的时候表情的处理。
  14. vue 描述框[el-descriptions] 与之对应 div
  15. TcaplusDB君 · 行业新闻汇编(五)
  16. AIX 6:新特性概述
  17. 文件存储php源码,FFS5-Mini v120731 最终版 php网络文件存储分享系统
  18. Profinet协议基础知识(三)
  19. 谷歌滤镜软件叫什么_谷歌app爆红的拍照功能:你最像名画中的谁?
  20. 做图片用的计算机配置文件,主要用于视频剪辑及图片处理,电脑该如何配置?...

热门文章

  1. GitHub Desktop离线安装包
  2. 1092 回文字符串(51nod)
  3. 加速Java应用开发速度3——单元/集成测试+CI
  4. c语言中的-代表什么意思
  5. celery学习笔记:celery安装,并运行第一个应用
  6. 诗与远方:无题(十八)
  7. Django 数据库建表的时候 No migrations to apply原因出现和解决
  8. 启动web项目(maven)
  9. 使用tomcat时,Add and Remove出现异常
  10. AOP 详解 、AOP 中通知类型 、AOP 两种实现方式(Schema-base 和 AspectJ)