【问题标题】:Singleton Download Manager?单例下载管理器?
【发布时间】:2013-10-10 20:17:31
【问题描述】:

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

所以在我看来,视图控制器本身不能保存对下载操作的任何引用,我认为这将是处理 NSURLConnection 内容的 NSOperation 的子类,也不能是 NSOperationQueue 的所有者操作被添加到。

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

【问题讨论】:

    标签: ios singleton nsurlconnection nsoperation nsoperationqueue


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      This post 您可能也会感兴趣。每个 iOS 应用程序都带有一个单例 (AppDelegate),因此您的类可能只是一个 single instance,它被 AppDelegate 引用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-10
        • 1970-01-01
        • 1970-01-01
        • 2016-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多