objective-c - iOS:处理重叠的后台请求

标签 objective-c multithreading ios background thread-safety

在 iOS 应用程序中,我正在编写一个将收到消息的类,执行后台请求(通过 performSelectorInBackground:withObject:),然后通过委托(delegate)方法返回结果(即然后将显示在 map 上)。当一次发生一个请求时,一切似乎都正常,但我试图弄清楚如何处理多个重叠请求。例如,如果用户在启动后台线程的搜索框中输入内容,然后在初始后台线程完成之前输入其他内容,应如何处理?

有几个选项(不要让第二个请求在第一个请求进行时开始,一旦第二个请求就停止第一个,让两个同时运行并返回独立的结果,等等),但是有一种通用/推荐的方法来处理这个问题吗?

最佳答案

我认为对此没有通用的答案。我的建议是根据任务的功能和它们之间的关系将任务(以 NSOperations 和/或 block 的形式)分开。

示例:您不希望将图像大小调整操作添加到同一个队列中,同时从网络上获取一些不相关的提要,尤其是在它们之间不存在任何关系的情况下。或者你这样做是因为两者都需要大量内存并且因此不能并行运行。

但是您可能希望将网络图像搜索操作添加到同一队列,同时取消之前添加到该队列的相同类型的操作。这些图像搜索操作中的每一个都可能初始化图像调整大小操作并将其放入其他队列中。现在你有一个关系,除了图像搜索操作之外还必须取消调整大小。如果图像搜索操作比关联的调整大小操作花费的时间更长怎么办?您如何保留对它的引用或知道它何时完成?

是的,它很容易变得复杂,很抱歉,如果我没有给你任何具体的答案,因为每种情况的独特性,但最终让它像瑞士时钟一样运行是非常令人满意的:)

关于objective-c - iOS:处理重叠的后台请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6157508/

相关文章:

objective-c - 从 NSDictionary 中提取信息

ios - 如何从ios应用程序设置快速拨号?

objective-c - Google 云存储 objective-c 示例

Consumer/Producer多线程同步错误

c# - 如何检查信号量的状态

ios - Amazon SQS/SNS 策略错误

ios - Objective C - IOS - 在类型对象上找不到属性 - 访问对象变量时

iphone - 我的 UIView 动画不稳定 - 如何优化以下代码?

iphone - 在 Objective-C 中从 iDynamo Reader 读取加密数据

c++ - 从另一个线程唤醒 QThread::exec()