cocos2dx 3.0版本之后的两大基类,一类是Ref类,一类是Value类,本文主要研究他们的内存管理。
我们知道程序运行的时候,内存有分堆区,栈区,全局区,代码区等区域。栈区的内存不需要程序员去手动管理,自动变量、局部变量,都是放在这个区域里的。我们通常意义上讲的内存管理,都是针对堆区的内存管理,alloc、calloc、malloc,new,delete 这些关键字的操作都是针对堆区,下文说的内存也代指堆区。
Ref类在2.0版本是叫CCObject,后来在3.0alpha版本和beta版有叫做Object,最后在3.0正式版上叫做Ref类。很多常见类的基类,比如Node,Director。
先说一下,ObjC的内存管理机制是引用计数机制,简单解释一下引用计数机制,就是这个类有一个整形的变量,当有一个指针指向这个类的实例的时候,这个整形变量就加一,当这个整形变量为0的时候,说明没有指针指向这块内存地址了,这块内存地址就被释放了。内存泄露就是当没有指针指向这块内存地址的时候,这块内存地址还不释放,浪费资源。野指针,就是指针指向一块已经被释放掉的内存地址。引用计数机制有两种管理方式,ARC(自动引用计数管理)和MRC(手动引用计数管理),MRC下,程序员需要自己调用retain,release,autorelease等方法对引用技术进行操作。在ARC下,是编译的时候,编译器会自动加上这些方法。
由于Ref类主要是模仿ojbC的NSObject类,尤其是内存管理方面,所以Ref类同样也是使用引用计数机制,也有retain,release,autorelease等方法,自动内存管理上,有点差别,Ref类主要使用static creat函数自动管理,其实就是放到自动释放池里。
Value类是CPP 11的新内容,基本不用管理内存,因为Value类实例化的对象是放在栈区。包装,可以封装基本数据类型,比如:int,float。使基本数据类型具有面向对象的特点。
原文链接:https://www.f2er.com/cocos2dx/343560.html