代码之家  ›  专栏  ›  技术社区  ›  esad

Nthread、AsyncSocket和对象释放

  •  0
  • esad  · 技术社区  · 15 年前

    我有一段使用AsyncSocket的网络代码,但将其移动到一个单独的runloop。我用以下代码创建这个runloop:

    [NSThread detachNewThreadSelector:@selector(_workerLoop) toTarget:self withObject:nil];
    

    -(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断开连接时终止,因此在socket断开连接之前,不可能释放和释放此对象。

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

    1 回复  |  直到 15 年前
        1
  •  0
  •   esad    15 年前

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

    推荐文章