我开发的应用程序是一个与 OS X 服务器通信的 iOS 客户端。该应用程序的当前版本在主线程上执行所有网络逻辑,这对于我想做的事情来说效果很好。
然而,在下一个版本中,我希望网络逻辑更加灵活。为了使其工作,我想专门为其提供一个单独的线程,但我不太确定哪种解决方案适合我的需求。
起初,GCD 看起来是一个不错的候选者,但它似乎只适合在单独的线程上执行的工作块。我想做的是将所有网络逻辑放在一个单独的线程上。 iOS 客户端和 OS X 服务器之间的连接是持久的,所有数据流和处理都应在该单独的线程上进行。
问题归结为,哪种方法最适合这种情况?
编辑:为了消除任何混乱,我使用的连接使用套接字和 NSStream 实例。我不处理连接到远程网络服务器的问题。换句话说,AFNetworking 和 ASIHttpRequest 不适合我。
-
您可以使用 runloop 创建一个线程(我们称之为 NetworkThread),运行以下代码:
while (!self.isCancelled) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
[pool release];
}
那么你可以使用- (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(id)arg waitUntilDone:(BOOL)wait
在 NetworkThread 上执行网络请求选择器。
所有网络回调都将在 NetworkThread 上调用,然后在 NetworkThread 上处理您的响应数据,将最终数据推送到主线程,更新 UI。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)