gpt4 book ai didi

iphone - 如何在 applicationDidEnterBackground/applicationWillEnterForeground 之后正确关闭/重启 NSThread

转载 作者:搜寻专家 更新时间:2023-10-30 19:50:06 29 4
gpt4 key购买 nike

出于性能原因,我实例化了一个专用的 NSThread 来处理从网络服务器流式传输的传入消息。我使用 NSOperation 来实例化连接并通过 NSURLConnection 委托(delegate)接收传入数据,但是一旦新数据传入并被解析,我就会将消息处理卸载到专用的 NSThread。这个想法是让一个线程专注于接收传入的消息,而让另一个线程只进行处理。

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

还有,当applicationWillEnterForeground进来的时候,应该如何重启NSThread?

除了主线程,似乎其他后台线程的状态在进入休眠和重启之间没有保持。

顺便说一下,我完全赞成将 NSOperations 用于大多数具有可测量工作量的任务——即,通过网络访问资源、执行计算等。但是,在这种情况下,我需要通过调用 performSelector:onThread:withObject:waitUntilDone: 并将其传递给目标线程,在始终存在的长期专用线程上即时处理消息。似乎 NSOperation 不适合这个。非常感谢您的意见。

最佳答案

“出于性能原因”?

  • 如果处理时间不长,则在主线程上运行所有内容(包括 NSURLConnection)。并发错误是一个主要问题。
  • 如果你想让事情串行运行,你可以用一个带有 maxConcurrentOperations = 1 的 NSOperationQueue 模拟一个“单线程”。我很确定 NSOperationQueue 使用线程池(在 4.0 上,GCD 可能使用线程池),这意味着您不需要一直保持线程运行。

除此之外,您的进程会由系统自动挂起和恢复,因此您无需终止线程。

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

关于iphone - 如何在 applicationDidEnterBackground/applicationWillEnterForeground 之后正确关闭/重启 NSThread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3770536/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com