iOS面试面试

iOS面试题收集(之AFN 网络请求)

2017-10-27  本文已影响694人  SK丿希望

AFN:网络请求

AFN主要使用在2个场景中

(1):发送网络请求
(2):实时监测网络状态

AFNetworking 2.0 和3.0 的区别
  1. AFNetworking在3.0版本中删除了基于 NSURLConnection API的所有支持。如果你的项目以前使用过这些API,建议您立即升级到基于 NSURLSession 的API的AFNetworking的版本。
  2. AFNetworking 3.0现已完全基于NSURLSession的API,这降低了维护的负担,同时支持苹果增强关于NSURLSession提供的任何额外功能。
  3. 可以结合MBProgressHUD,网络请求时间短的话,就可以不要显示HUD,提高用户体验,另外HUD也可以懒加载,全程只需要一个HUD即可。HUD内部有创建HUD对象时涉及到请求时间的类方法,在这个方法中如果请求时间小于某个值,就返回nil,即不显示HUD。此外AFN还有联网检测功能,每次请求网络之前先检测有没有网络,没有网络则提示用户(涉及到AFN和HUD的组合封装)
   GET请求:

   请求参数会在浏览器的地址栏中显示,所以不安全;
   请求参数长度限制长度在1K之内;
    GET请求没有请求体,无法通过request.setCharacterEncoding()来设置参数的编码;
    POST请求:

   请求参数不会显示浏览器的地址栏,相对安全;
   请求参数长度没有限制;
AFNetworkReachabilityManager 实时检测网络状态改变的类

AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];

// 设置网络状态改变之后的操作
[manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
    
    // status :当前的网络状态.
    //        AFNetworkReachabilityStatusUnknown
    //        AFNetworkReachabilityStatusNotReachable
    //        AFNetworkReachabilityStatusReachableViaWWAN
    //        AFNetworkReachabilityStatusReachableViaWiFi
    
    switch (status) {
        case AFNetworkReachabilityStatusUnknown:
            NSLog(@"未知的网络状态");
            break;
        case AFNetworkReachabilityStatusNotReachable:
            NSLog(@"没有网络");
            break;
        case AFNetworkReachabilityStatusReachableViaWWAN:
            NSLog(@"蜂窝移动网络");
            break;
        case AFNetworkReachabilityStatusReachableViaWiFi:
            NSLog(@"WIFI网络");
            break;
        default:
            break;
    }
}];
// 开始检测网络状态
[manager startMonitoring];
上一篇 下一篇

猜你喜欢

热点阅读