NSThread,AsyncSocket和对象释放

时间:2010-02-17 01:27:59

标签: objective-c cocoa nsthread asyncsocket nsrunloop

我有一段使用AsyncSocket的网络代码,但将其移至单独的runloop。我正在使用以下代码创建此runloop:

[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断开连接时终止,因此在套接字断开连接之前无法释放和取消分配此对象。

我该如何解决这个问题,或者我做错了什么?

1 个答案:

答案 0 :(得分:0)

我通过将runloop构造函数重构为自己的类来解决这个问题,由处理网络代码的父类引用。这样,父对象被释放,它可以停止线程并释放runloop