AFNetworking、网络状态监听

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(^)(idformData))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(@"网络有问题");
        }
     }

你可能感兴趣的:(AFNetworking、网络状态监听)