码迷,mamicode.com
首页 > 其他好文 > 详细

AFN使用介绍

时间:2015-05-09 10:18:03      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:afn使用介绍   网络   

前三节,我详细的介绍了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
	
};

AFN使用介绍

标签:afn使用介绍   网络   

原文地址:http://blog.csdn.net/sinat_27706697/article/details/45598567

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!