Iphone 打开 gl es 应用程序和自动释放池

Posted

技术标签:

【中文标题】Iphone 打开 gl es 应用程序和自动释放池【英文标题】:Iphone open gl es application and autorelease pool 【发布时间】:2009-09-28 17:52:00 【问题描述】:

所以我正在 iphone 上创建我的第一个 opengl es 应用程序。我想自动释放一个对象,那时我注意到我似乎无法找到自动释放池的位置。

1) 是否已经在 iphone opengl es 应用程序中为我创建了自动释放池? 2) 如果它已经为我创建了,那么池多久会被排干一次?

【问题讨论】:

【参考方案1】:

你有 main.m 吗?如果您使用的是标准 GL ES 应用模板,您应该会看到:

int main(int argc, char *argv[]) 

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    int retVal = UIApplicationMain(argc, argv, nil, nil);
    [pool release];
    return retVal;

如果是这样,那么您确实有一个自动释放池,并且每次您通过运行循环时它都会被耗尽。

【讨论】:

谢谢,这是我需要的信息。我不完全理解它是如何在每次运行循环中耗尽的,但我会假设这段代码隐藏在我看不到的超类中的某个地方。 有点混乱。这里有一些链接:***.com/questions/798950 ***.com/questions/581828/autorelease-scope/… 注意部分:运行循环在调度事件之前创建一个新的自动释放池(例如 applicationDidFinishLaunching:) 并在事件完成时销毁该池 顺便说一下,为了确保您知道,您可以创建自己的池并将其排干。您必须在有意义的时候阅读。【参考方案2】:

在其他来源文件夹下,我找到了一个名为 main.m 的文件

它有自动释放池。它似乎只在应用程序结束时耗尽

【讨论】:

不,每次运行循环时它都会被耗尽。例如,如果你正在处理一个 -drawRect,当你从那个 -drawRect 返回时,你应该假设池正在被耗尽——而且很可能是。 另外,请记住 UIApplication main 实际上永远不会返回。因此,在它之后发生的任何事情都不会被执行。应用程序通过 exit() 调用退出。

以上是关于Iphone 打开 gl es 应用程序和自动释放池的主要内容,如果未能解决你的问题,请参考以下文章

iPhone:自定义自动释放池中的崩溃

打开 GL ES 2.0 画一个正方形

内存泄漏与自动释放的字符串 iphone

打开 GL ES 2.0 为啥我的 VBO 不工作?

如何在iphone中使用自动释放

打开 GL ES 2 - glFramebufferTexture2D 带有不完整的缺少附件错误