Расписание NSStreams во вторичном потоке

В приложении для iPad, которое я разрабатываю, мне нужно поместить обработку сети в отдельный поток, поскольку он иногда блокирует пользовательский интерфейс приложения. На данный момент я создал объект Connection, в котором идет вся сетевая логика (NSStreams и его delegate методы).

Основное препятствие заключается в том, как создать вторичный поток и запланировать NSStreams в цикле выполнения этого потока. Я явно создаю NSThread, который затем принадлежит объекту Connection?

Я экспериментировал с NSOperation, но это не казалось лучшим решением, так как я чувствую потребность в потоке, предназначенном для обработки сетевых событий.

Указания и советы приветствуются. Любой пример кода также может быть полезен.

Барт


person Bart Jacobs    schedule 24.09.2010    source источник


Ответы (2)


Мне тоже нравится подход detachNewThreadSelector..., но, к вашему сведению, вы можете использовать NSOperation и NSOperationQueue. Он выбрасывает неконкурентные операции в отдельные потоки.

Чтобы запустить потоки, вы смотрите на такие вещи:

[self.outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:mode];

Обязательно посмотрите образец Apple «PictureSharing» по адресу http://developer.apple.com/library/mac/#samplecode/PictureSharing.

В частности, скопируйте классы FileSendOperation и FileReceiveOperation, а также классы QRunLoopOperation. Я также использую класс QWatchedOperationQueue примера LinkedImageFetcher, который хорошо работает с классами PictureSharing. Я взял их классы *SendOperation и *ReceiveOperation и превратил их в классы, отправляющие/получающие то, что мне нужно (некоторые NSData).

Тогда это так же просто, как:

 FileSendOperation *op;
 op = [[[FileSendOperation alloc] initWithFilePath:somePath outputStream:outStream ] autorelease];

 [self.queue addOperation:op finishedAction:@selector(networkingDone:)];
person Graham Perks    schedule 01.10.2010

Я просто немного погуглил, и я придумал это:

http://kdl.nobugware.com/post/2008/12/22/nsthread-iphone-template/

Я думаю, это то, что вам нужно ;)

РЕДАКТИРОВАТЬ: http://www.xprogress.com/post-36-threading-tutorial-using-nsthread-in-iphone-sdk-objective-c/ Может быть, это полезно для...

Если вы читаете код, вы видите PerformSelectorOnMainThread (или что-то в этом роде), чтобы вы могли отправлять информацию из потока в поток.

person dododedodonl    schedule 28.09.2010