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

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

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

【问题讨论】:

    标签: iphone objective-c opengl-es autorelease


    【解决方案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;
    }
    

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

    【讨论】:

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

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

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

    【讨论】:

    • 不,每次运行循环时它都会被耗尽。例如,如果你正在处理一个 -drawRect,当你从那个 -drawRect 返回时,你应该假设池正在被耗尽——而且很可能是。
    • 另外,请记住 UIApplication main 实际上永远不会返回。因此,在它之后发生的任何事情都不会被执行。应用程序通过 exit() 调用退出。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-17
    • 2014-09-02
    • 2011-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多