3.0之前
AFNetworking基于NSURLConnection和NSURLSession。
AFHTTPSessionManager包装的NSURLSession
AFHTTPRequestOperationManager包装的NSURLConnection3.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
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
时间: 2024-11-05 08:25:33