我的应用程序的辅助线程的运行循环如下。 它有一个嵌套的控制循环。二级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]
执行重新进入内环