3

现在,我有一些多年前编写的旧代码,允许 iOS 应用程序在用户离线时排队作业(发送消息或向后端服务器提交数据等)。当用户重新联机时,任务将运行。如果应用程序进入后台或被终止,队列将被序列化,然后在应用程序再次启动时重新加载。我已经分类NSOperationQueue了,我的工作是NSOperation. 这使我可以灵活地为我提供数据结构,我可以直接子类化(操作队列),并且通过子类化NSOperation,如果我的任务失败(服务器关闭等),我可以轻松地重新排队。

我很可能会保持原样,因为如果它没有坏就不要修复它,对吧?此外,这些都是非常轻量级的操作,我不希望在我正在开发的当前应用程序中,在任何给定时间都会有很多任务排队。但是我知道使用NSOperation而不是GCD直接使用会产生一些额外的开销。

我不相信我可以像我那样子类NSOperationQueue化一个调度队列,所以每次应用程序发送到背景,对吧?也不确定如果工作失败,我将如何处理重新排队工作。现在,如果我HTTP 500 response从服务器获得一个,例如,在我的操作代码中,我会发送一个通知,其中包含失败NSOperation对象的深层副本。我的自定义操作队列会选择此通知并将任务添加到自身。不知道如果我能用GCD. 我还需要一种简单的方法来取消所有操作或在网络连接丢失时暂停队列,然后在重新获得网络访问权限时重新激活。

只是希望从其他可能做过类似或GCD比我更熟悉的人那里得到一些想法、意见和想法。

另外值得注意的是,我知道有一些新的后台任务支持即将推出,iOS 7但可能需要一段时间才能成为我的部署目标。我还不确定它是否能完全满足我的需要,所以目前只看GCD.

谢谢。

4

1 回答 1

1

如果NSOperationvs 向 GCD 提交块曾经显示为可测量的开销,那么问题不在于您正在使用NSOperation,而是您的操作过于精细。我希望这种开销在任何现实世界的情况下都是无法测量的。(当然,您可以设计一个测试工具来测量开销,但只能通过进行实际上什么都不做的操作。)

使用完成工作的最高抽象级别。仅当硬数据告诉您应该下移时。

于 2013-08-08T17:26:47.447 回答