在辅助线程上安排NSStreams

时间:2010-09-24 04:38:31

标签: ipad cocoa-touch networking nsthread

在我正在开发的iPad应用程序中,我需要将网络处理放在一个单独的线程上,因为它偶尔会阻止应用程序的UI。目前,我已经创建了一个Connection对象,其中所有网络逻辑都是(NSStreams及其delegate方法)。

主要障碍是如何创建辅助线程并在此线程的运行循环上安排NSStreams。我是否显式创建了一个由NSThread拥有的,然后由Connection对象拥有?

我一直在试验NSOperation,但这似乎不是最好的解决方案,因为我觉得需要专门处理网络事件的线程。

欢迎提供指示和建议。任何示例代码也可能有用。

巴特

2 个答案:

答案 0 :(得分:1)

我也喜欢detachNewThreadSelector ...方法,但仅供参考,您可以使用NSOperationNSOperationQueue。它会将非并发操作抛到不同的线程上。

为了让小溪继续进行,你会看到这样的事情:

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

绝对可以在http://developer.apple.com/library/mac/#samplecode/PictureSharing查看Apple样本“PictureSharing”。

特别要复制FileSendOperationFileReceiveOperation类以及QRunLoopOperation。我还使用了LinkedImageFetcher示例的QWatchedOperationQueue类,它适用于PictureSharing类。我拿了他们的* SendOperation和* ReceiveOperation类,把它们变成了发送/接收我需要的类(一些NSData)。

然后它就像:

一样简单
 FileSendOperation *op;
 op = [[[FileSendOperation alloc] initWithFilePath:somePath outputStream:outStream ] autorelease];

 [self.queue addOperation:op finishedAction:@selector(networkingDone:)];

答案 1 :(得分:0)

我做了一些谷歌搜索,我想出了这个:

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(或其他内容),因此您可以将信息从线程发送回线程。