Мне тоже нравится подход detachNewThreadSelector
..., но, к вашему сведению, вы можете использовать NSOperation
и NSOperationQueue
. Он будет генерировать не параллельные операции в отдельных потоках.
Чтобы запустить поток, вы смотрите на такие вещи:
[self.outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:mode];
Определенно посмотрите на образец Apple "PictureSharing" на http://developer.apple.com/library/mac/#samplecode/PictureSharing.
В частности, скопируйте классы FileSendOperation
и FileReceiveOperation
и QRunLoopOperation
. Я также использую LinkedImageFetcher
образец QWatchedOperationQueue
класса, который хорошо работает с классами PictureSharing. Я взял их * SendOperation и * ReceiveOperation классы и превратил их в классы, отправляющие / получающие то, что мне нужно (некоторые NSData).
Тогда это так же просто, как:
FileSendOperation *op;
op = [[[FileSendOperation alloc] initWithFilePath:somePath outputStream:outStream ] autorelease];
[self.queue addOperation:op finishedAction:@selector(networkingDone:)];