在我的iOS应用中,许多ViewController需要根据用户输入和操作发送/接收来自服务器的数据。我将为我所有的网络活动使用NSURLSession。但我不想让每个ViewController都符合NSURLSession委托协议并重复所有的方法。在视图控制器中共享NSURLsession委托实现
我看到了两个解决方案
创建符合NSURLSession委托 协议的类。其他类创建该类的一个实例,并使用它的方法从服务器发送/接收数据。处理所有网络的类的重用将通过重载其init方法使用单例设计模式完成,以便仅创建它的实例。
- 这种方法的缺点似乎是单身人士使得创建单元测试非常困难,因为单元测试完全可以将每个类的功能与其他人隔离开来。 I.e.Suppose一个错误只发生,因为viewcontroler1问“共享类”发送一个特定的消息跟随viewcontroller 2问它发送一些其他消息。那么使用单元测试是不可能的。
UIViewController的子类,它实现了我的ViewControllers的方法和子类。这里
- 的一个问题是,如果我有各种不同的意见的应用程序,那么我就需要用NSURL会议委托方法每种视图控制器的创建子类。我必须谨慎地将方法分配给委托对象。当我看着它,我觉得这种方式也有同样的单元测试问题,方法1.
我将不胜感激 1.其他途径的任何意见在类似的情况 2使用了。以上方法的优点/缺点(包括上面列出的2)。我意识到这可能有点主观,但恕我直言,在设计模式上获得好建议与我的代码或使用哪个API解决问题的问题的答案一样重要(甚至更重要)X
“创建一个符合NSURLSession委托协议的类”。如果一次只有一个连接可以处于活动状态,并且/或者在视图控制器被销毁后应该继续连接,则将其设置为单例。否则,每个视图控制器可以使用该类的单个实例。 – Gruntcakes
谢谢,因为用户可能会发送一个文件,然后a)将应用程序放入后台或b)移动到应用程序中的另一个屏幕,我认为最好采用单例方法。但是我看到一些关于单身人士是坏事的可怕的东西。恕我直言,所测试的可测试性问题似乎也适用于其他方法。所以,我认为我可能会这样做。 –