我的 iOS 应用程序中有一个专用的网络线程。线程的 -main 方法如下所示:
- (void)main
{
@try
{
while (!self.isCancelled)
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[[NSRunLoop currentRunLoop] run];
[pool drain];
}
}
@catch (NSException * e)
{
NSLog(@"%@", e);
}
}
我有一个 NSOperationQueue 填充了 http 操作(并发,基于运行循环的 NSOperation 子类)。现在,因为我知道什么时候有 http 操作需要 runloop 线程,所以我希望能够防止 runloop 线程在没有工作要做的时候执行。我在某处读到(有帮助,我知道)NSRunLoop 在没有工作时会自动休眠。但是,我使用 Instruments 的时间分析器并看到 runloop 线程始终处于活动状态。
如何安排我对 NSRunLoop 和 NSThread 的使用以防止这种资源浪费?