3

我的应用程序中的一个视图控制器允许从服务器下载文件。但是用户可以导航到这个视图控制器,点击“下载”按钮,然后返回到之前的视图控制器。如果他们再次导航到具有下载按钮的视图控制器,他们应该会看到进度,甚至看到下载已完成。

所以在我看来,视图控制器本身不能包含对下载操作的任何引用,我认为这将是 NSOperation 的子类,可以处理 NSURLConnection 的东西,也不能是操作获取的 NSOperationQueue 的所有者添加到。

这种情况不需要单例下载管理器吗?我经常看到单身人士气馁,但我还能怎么做呢?同样,可以在可以随时释放的视图控制器中启动下载。一旦开始下载,无论用户是否离开屏幕,它都应该完成。我想将所有内容直接下载到磁盘(不在内存中)。然后,当用户来到所述视图控制器时,我会检查下载管理器以查看相关下载是否已完成、正在进行或从未开始下载。

4

2 回答 2

2

我会使用单例。请注意何时/何地使用单例。在使用之前要谨慎考虑情况。

注意下载进度/完成的回调,因为单例将比发出请求的视图控制器寿命更长。视图控制器需要适当地管理他们的“观察”。

于 2013-10-10T20:34:33.360 回答
0

我认为这是可以使用单例模式的少数情况之一。它完全符合单例描述(通过Wikipedia):

在软件工程中,单例模式是一种将类的实例化限制为一个对象的设计模式。当需要一个对象来协调整个系统的动作时,这很有用。

我在我的应用程序中这样做,我已经看到其他人这样做了,例如:

这篇文章你可能也感兴趣。每个 iOS 应用程序都带有一个单例 (AppDelegate),因此您的类可能只是一个single instance,由 AppDelegate 引用。

于 2013-10-11T09:46:06.897 回答