2009-09-28 66 views
1

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

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; 
} 

如果是这样,那么你有一个自动释放池,它被倒掉每次你去通过runloop。

+1

谢谢这是我需要的信息。我并不完全理解它每次在runloop中如何被排空,但我会认为这段代码隐藏在我看不见的超类中的某个地方。 – Mel 2009-09-28 20:28:36

+0

这有点令人困惑。我这里还有一些链接: http://stackoverflow.com/questions/798950 – mahboudz 2009-09-28 20:45:37

+1

http://stackoverflow.com/questions/581828/autorelease-scope/583292#583292注意的部分:运行循环创建一个新的自动释放在它发送一个事件(例如applicationDidFinishLaunching :)并在事件结束时销毁该池时顺便提及, – mahboudz 2009-09-28 20:48:03

-1

根据该文件夹的其他来源,我发现了一个名为main.m文件

它具有自动释放池文件。它似乎只在应用端排出

+1

不,每次你通过runloop时它都会被排空。例如,如果您正在处理-drawRect,那么当您从该-drawRect返回时,应该假定该池正在被排空 - 可能是。 – mahboudz 2009-09-28 20:05:26

+1

另外,请记住,UIApplication main实际上并没有返回。所以在它没有执行之后发生的任何事情。应用程序通过exit()调用退出。 – mahboudz 2009-09-28 20:13:26