最新文章
Cocos2d-x游戏开发实例详解7:对象释放时机
03-25 13:59
Cocos2d-x游戏开发实例详解6:自动释放池
03-25 13:55
Cocos2d-x游戏开发实例详解5:神奇的自动释放
03-25 13:49
Cocos2d-x游戏开发实例详解4:游戏主循环
03-25 13:44
Cocos2d-x游戏开发实例详解3:无限滚动地图
03-25 13:37
Cocos2d-x游戏开发实例详解2:开始菜单续
03-25 13:32
ngui加载完后怎么释放内存
在3D移动端开发中,内存管理一直是令人头疼的问题。当加载的资源完成使用后,除了常规资源的释放,像NGUI相关资源的释放也不容忽视。实际上,NGUI的内存释放主要集中在其Texture和Sprite的释放上。
未引用NGUI组件时的内存释放
如果脚本程序中没有使用NGUI组件的引用,在切换场景后,第一时间调用 Resources.UnloadUnusedAssets() 方法,就可以释放掉相关的未使用资源。示例代码如下:
Resources.UnloadUnusedAssets();
引用NGUI组件时的内存释放
当脚本程序引用了NGUI组件时,例如将NGUI相关物体直接拖到脚本上,或者通过 Find 方法获取的物体,只要存在对NGUI组件的引用,这些组件就会被加载到内存中。此时,即使切换场景,这些引用的资源也不会被释放,调用 Resources.UnloadUnusedAssets() 同样无法释放这些资源。若要释放这些内存,需要在结束使用时删除这些引用。
为了实现资源的释放,我们可以借鉴iOS的思想,编写一个 dealloc 方法。以下是具体实现步骤和代码示例:
编写 dealloc 方法
在脚本之间的交互类中编写 dealloc 方法,该方法的主要功能是先调用其他脚本的 dealloc 方法,然后释放本脚本中的相关资源,最后调用 Resources.UnloadUnusedAssets() 和 System.GC.Collect() 来释放未使用的资源和进行垃圾回收。
void dealloc()
{
// 先调用其他脚本的dealloc
// 再释放本脚本中的资源
// 比如将这些引用加到一个数组里
for (int i = 0; i < UISpritsInScene.Count; i++)
{
// 销毁数组中的每个UISprite对象
DestroyImmediate(UISpritsInScene[i]);
}
// 将数组置为null,释放引用
UISpritsInScene = null;
// 释放未使用的资源
Resources.UnloadUnusedAssets();
// 强制进行垃圾回收
System.GC.Collect();
}
通过以上步骤和代码,我们可以在NGUI加载完成后,根据不同的引用情况,有效地释放内存,从而优化3D移动端应用的内存使用。