在这个使用GLKViewController显示红色屏幕的超级简单应用程序中,内存不断增长。如何阻止iOS EAGLContext的内存不断增长?
ViewController.h:
#import <UIKit/UIKit.h>
#import <GLKit/GLKit.h>
@interface ViewController : GLKViewController
@end
ViewController.m:
#import "ViewController.h"
@interface ViewController()
@end
@implementation ViewController {
EAGLContext* context;
}
- (void)viewDidLoad {
[super viewDidLoad];
context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
GLKView* view = (GLKView*)self.view;
view.context = context;
view.drawableDepthFormat = GLKViewDrawableColorFormatRGBA8888;
[EAGLContext setCurrentContext:context];
self.preferredFramesPerSecond = 60;
}
- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect {
glClearColor(1.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
@end
对于每一帧9个* 64个字节被分配并作为该图像中看到的永远不会被释放(注意该瞬时计数是0 IOAccellResource):
这是分配列表和堆栈跟踪的样子:
内存“泄漏”虽小,但它仍然设法尽管仅不到3分钟跑使用了6.5 MB。
EAGLContext中是否存在错误,或者我能做些什么吗?我注意到(我是iOS开发的新手),苹果公司的其他部分API使用区域分配器,而内存使用情况持续增长,当它真的应该处于某种稳定状态模式时。这让我觉得我错过了一些东西(我试图将它发送给LowMemory,但没有发生)。
不是一个答案,而只是一个建议:从来没有在任何情况下使用GLKView,GLKViewController或Objective-C中的任何其他GLKit组件。只使用矩阵,矢量...不仅这些组件是邪恶和不可预知的,而且当你尝试做一些自定义的事情时,你可能会很快限制你的进度。 –
对于我使用C++的实际渲染。但我至少必须使用'[EAGLContext presentRenderBuffer]'做“缓冲区交换”,对吧? – Kalle