我的應用程序的輔助線程的運行循環如下。 它有一個嵌套的控制循環。二級NSThread runloop需要autorelease池在哪裏?
- 外部循環運行的應用程序
- 內循環運行,而一個視圖是打開的,則該線程等待而視圖未打開的持續時間。
- 通過內循環的時間很短,只有幾分之一秒。
我的代碼不會故意在未發佈的池中留下任何自動發佈的對象,但我不知道操作系統在做什麼。
在主線程,可可包裝自動釋放池周圍的每一個通過運行循環。
在這個輔助線程中,我相信最接近的等值是通過內部循環。
inner autorelease pool將每次通過內部循環包裝。
圍繞內環的中間池包裝,使創建並自動釋放在這個級別的對象不會保持,直到應用程序終止。
的外池包裝整個runloop。
我怎麼能確定這些池的創建和釋放正對我的代碼的速度有什麼影響。
如何確定所有三個池是必需的還是過度殺傷?
代碼和解釋:
- (void)processLoop
{
NSAutoreleasePool * outerPool = [[NSAutoreleasePool alloc] init];
[processCondition lock];
//outer loop
//this loop runs until my application exits
while (![[NSThread currentThread] isCancelled])
{
NSAutoreleasePool *middlePool = [[NSAutoreleasePool alloc];
if(processGo)
{
//inner loop
//this loop runs typically for a few seconds
while (processGo && ![[NSThread currentThread] isCancelled])
{
NSAutoreleasePool *innerPool = [[NSAutoreleasePool alloc]; init];
//within inner loop
//this takes a fraction of a second
[self doSomething];
[innerPool release];
}
[self tidyThingsUp];
}
else
{
[processCondition wait];
}
[middlePool release];
}
[processCondition unlock];
[outerPool release];
}
的組合:
- 內的while循環
- NSCondition * processCondition
- 切換和
NO
processGo
之間YES
讓我停止和啓動內循環的同時不取消該線程。
if (processGo == YES)
執行進入內while循環。
當主線程設置
processGo = NO
執行離開所述內的while循環和tidys向上
在外循環的下一次通,執行點擊
[processCondition wait]
並等待
如果主線程重置
processGo == YES
,並呼籲
[processCondition wait]
執行重新進入內環