【发布时间】:2015-12-23 19:36:35
【问题描述】:
在我的 iOS 应用程序中,许多 ViewController 需要根据用户输入和操作从服务器发送/接收数据。我将使用 NSURLSession 进行所有的网络活动。但我不想让每个 ViewController 都符合 NSURLSession 委托 协议并重复所有方法。
我看到了两种解决方案
-
创建一个符合 NSURLSession 委托的类 协议。其他类创建此类的实例并使用其方法从服务器发送/接收数据。处理所有网络的类的重用将使用单例设计模式通过重载其 init 方法来完成,以便仅创建它的实例。
- 这种方法的缺点似乎是使用单例很难创建单元测试,这些单元测试完全使每个类的功能与其他类隔离。即假设仅发生错误是因为 viewcontroler1 要求“共享类”发送特定消息,然后 viewcontroller 2 要求它发送其他消息。然后不可能使用单元测试来捕捉它。
-
实现方法的 UIViewController 的子类和我的 ViewControllers 的子类。
- 这里的一个问题是,如果我在应用程序中有不同类型的视图,那么我需要使用 NSURL 会话委托方法为每种类型的 ViewController 创建子类。而且我必须小心地将委托对象从一个方法分配到另一个方法。当我看到它时,我认为这种方法也存在与方法 1 相同的单元测试问题。
我将不胜感激任何 cmets 1. 其他人在类似情况下使用的方法 2.上述方法的优缺点(包括我上面列出的2种)。我意识到这可能有点主观,但恕我直言,在设计模式上获得好的建议与回答我的代码有什么问题或使用哪个 API 来解决问题一样重要(甚至更重要)X
【问题讨论】:
-
“创建一个符合 NSURLSession 委托协议的类”。如果一次只能激活一个连接和/或在视图控制器被销毁后连接应该继续,则使其成为单例。否则,每个视图控制器都可以使用该类的单个实例。
-
谢谢,因为用户可能会发送一个文件,然后 a) 将应用程序置于后台或 b) 移动到应用程序中的另一个屏幕,我认为最好采用单例方法。但我看到了一些关于单身人士是一件坏事的可怕事情。恕我直言,sassed 的可测试性问题似乎也适用于其他方法。所以,我想我可能会选择这个。
标签: ios objective-c singleton nsurlsession delegation