在我的iOS应用程序中,许多ViewControllers需要根据用户输入和操作从服务器发送/接收数据。我将使用NSURLSession进行所有网络活动。但我不想让每个ViewController都符合NSURLSession委托 协议并重复所有方法。
我看到两个解决方案
创建一个符合NSURLSession委托的类 协议。其他类创建此类的实例,并使用其方法从服务器发送/接收数据。处理所有网络的类的重用将通过重载其init方法使用单例设计模式来完成,以便只创建它的实例。
UIViewController的子类,它实现了我的ViewControllers方法和子类。
我很感激任何评论 1.其他人在类似情况下使用的方法 2.上述方法的优点/缺点(包括我在上面列出的2)。我意识到这可能有点主观,但是恕我直言的设计模式得到了很好的建议,与我的代码或用于解决问题X的API有什么关系(甚至更重要)的答案一样重要
答案 0 :(得分:1)
我过去这样做的方式是:
1)创建了一个包含NSURLSession对象的类 @interface CustomSession:NSURLSessionDelegate @property(非原子,强)NSURLSession * mySession;
2)在CustomSession init方法初始化mySession,将委托设置为self。
3)在CustomSession中实现了所需的NSURLSession委托方法。
4)使用块方法(可选,但我更喜欢它们)
5)决定是否要将CustomSession用作单例,或者在每次需要时将其实例化。实际上,您可以相应地定义init方法。
+ (CustomSession *)session
{
//Singleton
}
+ (instancetype) newClient{
//normal init method}
6)对于单元测试,你可以在CustomSession中将一个弱指针指向父VC(正如你所指出的,如果你没有使用Singleton,这将有效。)
快速建议:使用AFNetworking,将简化您的生活。例如,我使用AFHTTPSessionManager和提供的相应块方法: [self GET:detailsURL参数:参数成功:^(NSURLSessionDataTask * task,id responseObject)