cocos2d内存管理的一些学习总结
2013-10-16 10:17
309 查看
这些天处理一个程序里的内存泄漏问题,主要是ios应用里用到了一个cocos2d做的CCBlade效果插件。
主要步骤:
在viewController的viewDidLoad方法中获取CCDirector的一个实例:
然后初始化一个CCGLView:
这样在加在当前view的时候就在当前view之上新建了一个view,并推入一个新的场景。
之后在场景之中做了一系列操作。
viewController的dealloc方法中:
来在最后进行关闭。
发现这种方法每次开关操作,都会遗留大约0.02M的内存没有释放。而且用Instrument查看不会报内存泄漏。
又复习了下cocos2d的内存管理,知道:cocos2d在内存管理方面做得很出色,编码者只要在retain上加以注意,其他的内存释放问题都由cocos2d自己负责。
关于场景内存的管理问题,cocos2d会在场景切换之后完成,当新的场景调入内存之后,原先场景的内存就会释放。
可是采用上述方法,发现在director结束之后,之前的场景并没有被释放掉,连场景中的NSTimer还在努力的工作。
查了半天资料也没找到如何手动释放场景。
后来用断点跟踪了程序的执行,发现:
会首先执行:
原来场景确实已经退出了,但是为什么没有执行场景的dealloc方法,这个之后还得看一下dealloc和onExit的区别。看完再把这块补上。
于是只好去场景中添加onExit方法,在方法中释放场景中申请的各项内存。问题解决。
不过在onExit方法中添加的[self removeAllChildrenWithCleanUp:YES] 似乎并没有起作用。有待进一步研究。
主要步骤:
在viewController的viewDidLoad方法中获取CCDirector的一个实例:
CCDirector *director = [CCDirector sharedDirector];
然后初始化一个CCGLView:
CCGLView *glView = [CCGLView viewWithFrame:self.view.bounds pixelFormat:kCCTexture2DPixelFormat_RGBA8888 depthFormat:0 preserveBackbuffer:NO sharegroup:nil multiSampling:NO numberOfSamples:0];
[director setView:glView]; glView.opaque=NO; [director setAnimationInterval:1.0/30]; [self.view addSubview:glView]; [CCTexture2D setDefaultAlphaPixelFormat:kCCTexture2DPixelFormat_RGBA8888]; [director pushScene: [HelloWorld scene]];
这样在加在当前view的时候就在当前view之上新建了一个view,并推入一个新的场景。
之后在场景之中做了一系列操作。
viewController的dealloc方法中:
-(void)dealloc{ [[CCDirector sharedDirector] end]; [super dealloc]; }
来在最后进行关闭。
发现这种方法每次开关操作,都会遗留大约0.02M的内存没有释放。而且用Instrument查看不会报内存泄漏。
又复习了下cocos2d的内存管理,知道:cocos2d在内存管理方面做得很出色,编码者只要在retain上加以注意,其他的内存释放问题都由cocos2d自己负责。
关于场景内存的管理问题,cocos2d会在场景切换之后完成,当新的场景调入内存之后,原先场景的内存就会释放。
可是采用上述方法,发现在director结束之后,之前的场景并没有被释放掉,连场景中的NSTimer还在努力的工作。
查了半天资料也没找到如何手动释放场景。
后来用断点跟踪了程序的执行,发现:
[[CCDirector sharedDirector] end]
会首先执行:
[runningScene_ onExit]; [runningScene_ cleanup]; [runningScene_ release];
原来场景确实已经退出了,但是为什么没有执行场景的dealloc方法,这个之后还得看一下dealloc和onExit的区别。看完再把这块补上。
于是只好去场景中添加onExit方法,在方法中释放场景中申请的各项内存。问题解决。
不过在onExit方法中添加的[self removeAllChildrenWithCleanUp:YES] 似乎并没有起作用。有待进一步研究。
相关文章推荐
- 关于内存管理思考方式的一些学习总结
- Cocos2d-x学习之---Andorid关于返回键退出的一些小总结
- Cocos2d-x学习之---Andorid关于返回键退出的一些小总结
- Cocos2d-x学习之---Andorid关于返回键退出的一些小总结
- Cocos2d-x学习之---Andorid关于返回键退出的一些小总结
- [Cocos2d-x for WP8学习笔记] 一些基本概念,建立自己的启动界面
- cocos2d-x学习笔记18:内存管理01:概述
- Cocos2D-X2.2.3学习笔记3(内存管理)
- 最近学习安卓中总结的一些知识点
- 总结过去10年的程序员生涯,给程序员的一些总结性忠告(别人总结,值得学习)
- 互联网技术学习中的一些资源总结
- cocos2d-x学习:CCSprite总结
- 【IOS 开发学习总结-OC-24】★★★objective-c——内存管理
- python学习总结---一些函数
- Javascript this 的一些学习总结
- 关于学习红黑树的一些小收获与总结
- 如何学习Python的一些总结
- 之前学习的一些总结
- 近期学习javascript和jquery遇到一些问题的技巧知识总结
- 关于一些学习php的总结