gpt4 book ai didi

ios - 在 NSThread 或 NSOperation 中使用 NSUrlConnection

转载 作者:行者123 更新时间:2023-11-29 04:02:30 24 4
gpt4 key购买 nike

我正在开发一个静态库,需要在后台执行一些操作,而不与主线程交互。为了给您一个想法,请考虑仅记录一些用户事件。库必须继续执行这些操作,直到用户退出应用程序或将其发送到后台(按下主页按钮) - 换句话说,它需要继续在循环内执行操作。

主应用程序线程和生成线程之间的唯一交互是,主应用程序线程有时会将一些内容(事件对象)放入生成线程可以读取/使用的队列中。除此之外,生成的线程将继续运行,直到应用程序存在或进入后台。

生成的线程需要执行的部分操作(尽管不是全部)涉及将数据发送到 HTTP 服务器。我本以为可以很容易地子类化 NSThread,重写它的 main 方法,然后对 NSUrlConnection 进行同步调用,并在该连接上设置某种超时,这样线程就不会永远挂起。例如,在 Java/Android 中,我们只需子类化 Thread,重写 start() 方法并调用同步 HTTP GET 方法(例如来自 Apache 的 HttpClient 类)。这非常简单并且效果很好。但从我在这里和其他地方看到的情况来看,显然在 iOS 上它比这复杂得多,而且我对真正有效的最佳方法感到非常困惑。

那么我应该继承 NSThread 并以某种方式使用 NSUrlConnection 吗?看来异步 NSUrlConnection 在 NSThread 中不起作用,因为委托(delegate)方法不会被调用,但是同步方法呢?我是否需要使用和配置 RunLoop 并设置自动释放池?或者我应该使用 NSOperation ?在我看来,我想做的事情很常见 - 有没有人有一个如何正确执行此操作的有效示例?

最佳答案

据我了解,要异步使用NSURLConnection,您需要一个运行循环。即使您使用 NSOperation,您仍然需要一个运行循环。

我见过的所有示例都使用主线程来启动具有运行循环的NSURLConnection。使用 NSOperation 的示例被设置为操作是 Concurrent,它告诉 NSOperationQueue 不要提供它自己的线程,然后确保 >NSURLConnection 在主线程上启动,例如通过调用 performSelectorOnMainThread:

这是一个例子:

Pulse Engineering Blog: Concurrent Downloads using NSOperationQueues

您还可以在 LinkedImageFetcher 示例中搜索 Apple 文档中的 QRunLoopOperation,该示例类显示了此类事情的一些细节。

(虽然我不确定我是否真的看到了任何展示如何运行自己的运行循环的代码,但这个示例再次依赖于主线程。)

关于ios - 在 NSThread 或 NSOperation 中使用 NSUrlConnection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15688793/

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