在我正在开发的iPad应用程序中,我需要将网络处理放在一个单独的线程上,因为它偶尔会阻止应用程序的UI。目前,我已经创建了一个Connection对象,其中所有网络逻辑都是(NSStreams
及其delegate
方法)。
主要障碍是如何创建辅助线程并在此线程的运行循环上安排NSStreams
。我是否显式创建了一个由NSThread
拥有的,然后由Connection对象拥有?
我一直在试验NSOperation
,但这似乎不是最好的解决方案,因为我觉得需要专门处理网络事件的线程。
欢迎提供指示和建议。任何示例代码也可能有用。
巴特
答案 0 :(得分:1)
我也喜欢detachNewThreadSelector
...方法,但仅供参考,您可以使用NSOperation
和NSOperationQueue
。它会将非并发操作抛到不同的线程上。
为了让小溪继续进行,你会看到这样的事情:
[self.outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:mode];
绝对可以在http://developer.apple.com/library/mac/#samplecode/PictureSharing查看Apple样本“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:)];
答案 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(或其他内容),因此您可以将信息从线程发送回线程。