Bar*_*obs 3 networking multithreading ios
我开发的应用程序是一个与OS X服务器通信的iOS客户端.此应用程序的当前版本执行主线程上的所有网络逻辑,这适用于我想要做的事情.
但是,在下一个版本中,我希望网络逻辑更加灵活.为了实现这一点,我想为它提供一个单独的线程,但我不确定哪种解决方案适合我的需求.
起初,GCD看起来是一个很好的候选者,但它似乎只适合在一个单独的线程上执行的大块工作.我想要做的是将所有网络逻辑放在一个单独的线程上.iOS客户端和OS X服务器之间的连接是持久的,所有数据流和处理都应该在该单独的线程上进行.
问题归结为,哪种方法最适合这种情况?
编辑:为了消除任何混淆,我使用的连接使用套接字和NSStream实例.我不是在处理连接到远程Web服务器.换句话说,AFNetworking和ASIHttpRequest对我来说不是一个选择.
您可以使用runloop创建一个线程(我们称之为NetworkThread),运行以下代码:
while (!self.isCancelled) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
[pool release];
}
Run Code Online (Sandbox Code Playgroud)然后,您可以使用- (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(id)arg waitUntilDone:(BOOL)wait在NetworkThread上执行网络请求选择器.
将在NetworkThread上调用所有网络回调,然后在NetworkThread上处理响应数据,将最终数据推送到主线程,更新UI.