AFNetworking 3.0

AFNetworking 3.0 
 
3.0之前

AFNetworking基于NSURLConnection和NSURLSession。
AFHTTPSessionManager包装的NSURLSession
AFHTTPRequestOperationManager包装的NSURLConnection

3.0之后

AFNetworking只基于NSURLSession。苹果将NSURLConnection淘汰了。


文件上传:

1、直接使用POST方式上传,通过在block里面设置需要上传的 文件。原理:就是在内部将请求体拼接起来。
2、上传多个文件:直接在block中设置多个上传文件的路径。
3、文件上传一般使用POST方式而不是使用AFHTTPSessionManager 的uploadTaskWithRequest:方法。但是还是需要我们自己拼接请求体(fromData:NSData*)这个参数。


设置解析服务器返回的数据

1、默认是JSON

    AFHTTPSessionManager *mgr = [AFHTTPsessionManager manager];
    mgr.responseSerializer默认是JSON.

2、设置AFN以XML形式解析服务器返回的数据

    AFHTTPSessionManager *mgr = [AFHTTPsessionManager manager];
    mgr.responseSerializer = [AFXMLParserResponseSerializer serializer]

3、设置AFN直接使用服务器的数据类,不解析。

    AFHTTPSessionManager *mgr = [AFHTTPsessionManager manager];
    mgr.responseSerializer = [AFHTTPResponseSerializer serializer]

创建AFHTTPSessionManager
    AFHTTPSessionManager*mgr= [AFHTTPSessionManagermanager];

GET请求
    -(NSURLSessionDataTask*)GET:(NSString*)URLString
               parameters:(id)parameters
               success:(void(^)(NSURLSessionDataTask*task,idresponseObject))success
               failure:(void(^)(NSURLSessionDataTask*task,NSError*error))failure
POST请求
    -(NSURLSessionDataTask*)POST:(NSString*)URLString
               parameters:(id)parameters
               success:(void(^)(NSURLSessionDataTask*task,idresponseObject))success
               failure:(void(^)(NSURLSessionDataTask*task,NSError*error))failure

文件上传
    -(NSURLSessionDataTask*)POST:(NSString*)URLString
                parameters:(id)parameters
 constructingBodyWithBlock:(void(^)(id<AFMultipartFormData>formData))block
                success:(void(^)(NSURLSessionDataTask*task,idresponseObject))success
                failure:(void(^)(NSURLSessionDataTask*task,NSError*error))failure

https

通过代理NSURLSessionTaskDelegate来处理证书。
但是通过AFN内部已经处理好了。


监控网络状态
AFN监控网络状态
    AFNetworkReachabilityManager*manager = [AFNetworkReachabilityManagersharedManager];
    [managerstartMonitoring];

    [managersetReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatusstatus) {
        //代码
    } ];

注意:要监控网络连接状态,必须要先调用单例的startMonitoring方法

苹果自带:Reachbility监控网络状态
判断现在的网络状态
     if ([Reachability reachabilityForLocalWiFi].currentReachabilityStatus != NotReachable) {
    NSLog(@"是wifi");
} else if ([Reachability reachabilityForInternetConnection].currentReachabilityStatus != NotReachable) {
    NSLog(@"是手机自带网络");
} else {
    NSLog(@"网络有问题");
}
监听目前的网络状态:

原理:通过监听通知,发现现在的网络发生改变,就获取到现在的网络状态。
注意:监听通知需要移除通知。也可用单例,在appdalegate中一开始就监听。

    /** 监控网络 */
    @property (nonatomic, strong) Reachability *reachability;

    // 监听通知

   [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getNetworkStatus) name:kReachabilityChangedNotification object:nil];

   // 开始监控网络
    self.reachability = [Reachability reachabilityForInternetConnection];
    [self.reachability startNotifier];

    // 移除通知
    - (void)dealloc
    {
      [[NSNotificationCenter defaultCenter] removeObserver:self];    
      [self.reachability stopNotifier];
      self.reachability = nil;
    }

    - (void)getNetworkStatus
    {
        if ([Reachability   reachabilityForLocalWiFi].currentReachabilityStatus != NotReachable) {
            NSLog(@"是wifi");
        } else if ([Reachability reachabilityForInternetConnection].currentReachabilityStatus != NotReachable) {
            NSLog(@"是手机自带网络");
        } else {
            NSLog(@"网络有问题");
        }
     }


文/闲得一B(简书作者)
原文链接:http://www.jianshu.com/p/e0a9e3cd327f
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
原文地址:https://www.cnblogs.com/W-Kr/p/5484577.html