0

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 が切断されたときにのみ終了するため、ソケットが切断されるまでこのオブジェクトを解放して割り当てを解除することは不可能です。

どうすればこれを修正できますか、それとも何か間違っているのでしょうか?

4

1 に答える 1

0

runloopコンストラクターを、ネットワークコードを処理する親クラスによって参照される独自のクラスにリファクタリングすることで、これを解決しました。このようにして、親オブジェクトの割り当てが解除され、スレッドを停止してrunloopを解放できます。

于 2010-02-17T18:45:35.233 に答える