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(@"网络有问题");
}
}
网友评论