2010-09-24 54 views
4

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

主要障碍是如何创建辅助线程并在此线程的运行循环中安排NSStreams。我是否明确创建了一个由Connection对象拥有的NSThread

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

指针和建议是受欢迎的。任何示例代码也可能有帮助。

巴特

回答

1

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

要获得流去,你看这样的事情:

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

绝对看苹果样品“PictureSharing”在http://developer.apple.com/library/mac/#samplecode/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:)];