2009-09-28 42 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