使用GLKit和ARC收到内存警告消息崩溃

时间:2012-09-10 15:13:24

标签: ios opengl-es automatic-ref-counting opengl-es-2.0 glkit

我正在开发一款适用于iPhone的游戏,它使用带有GLKit的OpenGL ES 2,带有ARC的box2D和对象C. opengl使用的所有纹理都存储在2048 x 2048图集中。 问题是,当我在iPhone 4S上运行应用程序并从初始GLKViewController推送几次(例如10-15次)某些GLKViewController时,xcode会给出内存警告消息,在某些情况下,应用程序崩溃而没有日志。 我试图让僵尸没有运气。 这仅适用于包含大量顶点的对象的级别,所以我认为我在释放为顶点或textcoords数组(C数组,例如GLfloat *)分配的内存时出错。我为传递给openGL的每个数组创建了私有属性,然后我用malloc分配了内存,我在dealloc方法中释放了所有数组。 我确信为每个对象调用了dealloc方法,因为我在其中放置了一个NSLog。 我在内存管理方面做得对吗? 有一种方法可以知道是什么产生了内存警告吗?

非常感谢你,对不起我的英语!

编辑: 好吧,我会尝试总结堆镜头分析后的进展。 保留在堆中的大部分内存引用函数'glBindVertexArrayOES'。问题是,当我仅使用顶点缓冲区对象时,在顶点缓冲区对象中使用的顶点数组分配的内存通常会释放,但当我将顶点缓冲区对象放入顶点数组对象时,它仍保留在堆中。 此外,只有当精灵(和所有分配的东西,包括genBuffers)从另一个更复杂的对象初始化时,才会出现此问题,而顶点数组对象不会保留在堆中,直接在GLKviewController上初始化精灵。

似乎唯一的解决方案是避免使用顶点阵列对象。

如果有人对顶点数组对象进行了同样的试验,请告诉我,同时我将继续开发没有顶点数组对象。

0 个答案:

没有答案