在這個使用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