AFN使用介绍

本人录制技术视频地址:https://edu.csdn.net/lecturer/1899 欢迎观看。

前三节,我详细的介绍了ASI的概念及基本使用。如果想了解的,请点击这里。由于AFN与ASI有很多相似的地方,所以我打算用一节的篇幅来介绍AFN。下载地址: https://github.com/AFNetworking/AFNetworking

AFN即AFNetworiking,AFN的主要结构如下:
1 : AFHTTPClient 

提供了一个方便的网络交互接口,包括默认头,身份验证,是否连接到网络,批量处理操作,查询字符串参数序列化,已经多种表单请求

2 : AFHTTPRequestOperation

和它得子类可以基于http状态和内容列下来区分是否成功请求了

3 : AFURLConnectionOperation 

和它的子类继承NSOperation的,允许请求被取消,暂停/恢复和由NSOperationQueue进行管理。

4 : AFURLConnectionOperation

可以让你轻松得完成上传和下载,处理验证,监控上传和下载进度,控制的缓存。


使用介绍:

1.Get请求

#pragma mark - 服务端返回的json数据(Example:调用天气预报接口)
-(void)jsonResponse
{
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    
    // 默认的responseSerializer是AFJSONResponseSerializer,所以下面一句可以不用书写
    // manager.responseSerializer = [AFJSONResponseSerializer serializer];
    
    //异步线程
    [manager GET:@"http://apis.haoservice.com/weather" parameters:@{@"cityname":@"上海"} success:^(AFHTTPRequestOperation *operation, id responseObject) {
        
        //如果返回的response是json数据,那么最终得到的responseObject是字典或者数组
        NSLog(@"Result:%@",responseObject);
        
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Error:%@",error);
    }];

}


#pragma mark - 想要返回html数据(Example:在百度搜索"上海")
-(void)commonResponse
{
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
  
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    
    //异步线程
    [manager GET:@"http://baike.baidu.com/link" parameters:@{@"url":@"DiOqVUurNw8HeMTTg0vhITJHuceUBUGS82tYYklR_p2UyBHtX7rM7t9RTRicuqVPr6qMATivos2fhALM2ETGKq"} success:^(AFHTTPRequestOperation *operation, id responseObject) {
        
        // 如果返回的response是AFHTTPResponseSerializer信息,那么得到的responseObject可以转化为string显示
        NSString *result = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
        
        NSLog(@"Result:%@",result);
        
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Error:%@",error);
    }];

}

2. Post请求

AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
    
    // 非文件参数,如:用户名,密码等信息
    NSMutableDictionary *params = [NSMutableDictionary dictionary];
    params[@"username"] = @"jason";
    params[@"password"] = @"123";
    
    [mgr POST:@"PostUrl" parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
        // 一定要在block中添加文件参数
        NSString *name = [[NSBundle mainBundle] pathForResource:@"Icon" ofType:@"png"];
        NSData *data = [NSData dataWithContentsOfFile:name];
        
        // name: 是后台服务器接收上传文件对应的参数
        [formData appendPartWithFileData:data name:@"test.txt" fileName:@"file" mimeType:@"text/plain"];
        
    } success:^(AFHTTPRequestOperation *operation, id responseObject) {
        
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        
    }];

至此,我已经将ASI与AFN介绍完毕,下面将它们进行对比,大家斟酌该选择谁......

1. 原理分析


观察上面的结构图可以看出: ASI基于CFNetwork框架开发,而AFN基于NSURL,底层的区别是导致二者性能差距的重要原因之一。理论上,ASI的性能优于AFN。

2. 版本提交的时间来看:

AFN的第一个提交是2011年的1月1日,那个时候ASI早已是1.8+的版本了;而当AFN发布1.0版,2012年10月份的时候,ASI早早的已经停止更新了。这样看起来,AFN是ASI的继任者,似乎不存在之前提到的选择困难的问题。


最后,再为大家介绍一个派生产物:Reachability(用来判断当前网络的状态)

[[Reachability reachabilityForInternetConnection] currentReachabilityStatus]

上面这句话用来得到当前的网络状态,它返回的是一个枚举值

enum {
	
	// Apple NetworkStatus Constant Names.
	NotReachable     = kNotReachable,
	ReachableViaWiFi = kReachableViaWiFi,
	ReachableViaWWAN = kReachableViaWWAN
	
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋恨雪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值