Расписание NSStreams на вторичном потоке - PullRequest
4 голосов
/ 24 сентября 2010

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

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

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

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

Барт

Ответы [ 2 ]

1 голос
/ 02 октября 2010

Мне тоже нравится подход 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:)];
0 голосов
/ 28 сентября 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/ Может быть, это полезно для ...

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

...