2010-09-22 50 views
4

出于性能方面的原因,我实例化一个专用的NSThread来处理从网络服务器流入的传入消息。我使用NSOperation来实例化连接并通过NSURLConnection委托接收传入数据,但一旦新数据进入并被解析,我将消息的处理卸载到专用的NSThread。这个想法是让一个线程专注于接收传入的消息,并让其他线程完成处理。如何在应用程序之后正确关闭/重新启动NSThreadDEnterBackground/applicationWillEnterForeground

当applicationDidEnterBackground进来时关闭NSThread的正确方法是什么?

另外,如何在applicationWillEnterForeground进来时重新启动NSThread?

除了主线程之外,似乎其他后台线程的状态在进入休眠和重新启动之间不会保持。顺便说一句,我都是用NSOperations来处理大量工作量大的任务 - 即通过网络访问资源,执行计算等。但是,在这种情况下,我需要通过调用performSelector:onThread:withObject:waitUntilDone:并将它传递给目标线程,来处理长时间存在的专用线程上的消息。看来NSOperation并不适合这一点。 我将不胜感激您的意见。

回答

0

“出于性能原因”?

  • 如果处理不需要太多时间,请在主线程上运行所有内容(包括NSURLConnection)。并发错误是一大痛苦。
  • 如果你想要串行运行,你可以用一个带有maxConcurrentOperations = 1的NSOperationQueue来模拟一个“单线程”。我很确定NSOperationQueue使用线程池(在4.0上,GCD可能使用线程池),这意味着你不需要保持线程始终运行。

除此之外,系统会自动暂停和恢复您的进程,因此您不需要关闭线程。

我不确定“其他后台线程的状态”是什么意思。

相关问题