我有一段使用AsyncSocket的网络代码,但将它移到了一个单独的运行循环中。我用下面这段代码创建这个运行循环:
[NSThread detachNewThreadSelector:@selector(_workerLoop) toTarget:self withObject:nil];下面是我的_workerLoop的样子(它们都在同一个类中):
-(void)_workerLoop {
workerLoop = [[NSRunLoop currentRunLoop] retain];
while(keepWorkerLoopRunning) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[workerLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.5f]];
[pool release];
}
[workerLoop release];
workerLoop = nil;
}现在,根据文档,NSThread将保留目标,并且由于此线程仅在AsyncSocket断开连接时终止,因此在套接字断开连接之前不可能释放和释放此对象。
我怎么才能解决这个问题,或者我做错了什么?
发布于 2010-02-18 02:45:35
我已经通过将runloop构造函数重构到自己的类中解决了这个问题,这个类由处理网络代码的父类引用。这样,父对象将被释放,它可以停止线程并释放运行循环
https://stackoverflow.com/questions/2277728
复制相似问题