GCD和网络加载的一点整理(二)
iOS开发中经常会碰到发起一个网络请求,还要在开始的时候写加载菊花转圈的代码,在网络请求示完成之后还要隐藏掉菊花转圈,甚至有时候网络请求失败或者服务器返回失败信息还要进行显示,针对这些都是繁杂的活,最近就想着把这两者封装结合起来,采用配置参数的形式来控制
1.配置转圏有信息提示类,对第三方库MBProgressHUD进行封装,新建LNMBProgressHUD继承于MBProgressHUD,方便以后扩展,再建MBManager类进行对转圈和信息提示进行管理,负责显示和查找显示在哪个视图上,全部用类方法来实现

查找要显示在哪个视图上,通过对window的rootViewController来层级查找,采用递归的方法来找到当前处在最顶层的控制器,从而把视图加载到这个控制器上,当然,如果当前控制器的视图未显示,也不会加载

2.配置网络请求类LNHttpManager 继承于AFHTTPSessionManager,单例形式存在,提供GET, POST方法,自定义相关回调,其中网络加载的枚举如下

在网络请求发起和结束之后作相应的处理即可

这里用了一个字典signDic来保存一个网络请求的配置枚举,以task.taskIdentifier作key来标识具体哪 个请求,请求完成之后根据配置作相应的处理
这样在发起网络请求时,就无需要写多余的代码,只需要调起网络请求类,传递一个参数即可,针对日常使用频率较高的,还封装了几个更简洁的方法

调起网络例子,发起网络会转圈,请求完成之后会自动消失,而在调起端无需要再关心转圏的加载与隐藏

其中显示提示信息的类和网络请求类没有直接的从属关系,两个类可单独拿出来使用,达到一定程度的解藕,写了一个初步的,以后可慢慢完善Demo链接,Demo中还包含了对GCD,RunLoop ,NSOperationQueue,RAC的一些见解和实例。