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

};
时间: 2024-10-11 21:20:22

AFN使用介绍的相关文章

AFN 获取数据,数据解析:JSON 介绍

AFN的介绍: 可以自动对服务器返回的数据进行解析,默认将服务器返回的数据当做 JSON 数据解析 是集XML解析,Json解析,网络图片下载,plist解析,数据流请求操作,上传,下载,缓存等网络众多功能于一身的强大的类库. 网络获取数据一直是手机软件的重中之重,如果处理的不好,会造成很差的用户体验.随着ASIHTTPRequest的停止更新,更换网络库是必然的事情,AFNetworking就是很好的替代品.而且都是轻量级,不要担心加入太多库会多软件性能有影响. AFN使用的注意事项:  (1

iOS 8:【转】AFNetworking 学习笔记

源地址:http://fann.im/blog/2012/08/21/afnetworking-notes/ 这篇笔记是在 AFN v0.10.1 时候写的,AFN v1.0 以后加入了不少新东西,比如 SSL 支持,不过整体结构没有变化. 后续跟进了一篇 AFNetworking Notes 2 上图来自 @mattt 对 AFN 的介绍:Everybody Loves AFNetworking And So Can You!. 学习 AFN,简单记录一下以加深自己理解. AFN 的基础部分是

iOS开发-常用第三方开源框架介绍(你了解的ios只是冰山一角)

iOS开发-常用第三方开源框架介绍(你了解的ios只是冰山一角) 2015-04-05 15:25 2482人阅读 评论(1) 收藏 举报开源框架 图像: 1.图片浏览控件MWPhotoBrowser       实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网络下载图片并进行缓存.可对图片进行缩放等操作.      下载:https://github.com/mwaterfall/MWPhotoBrowser目前比较活跃的社区仍旧是Github,

今天看到了一些第三方框架介绍,大家看看

图像: 1.图片浏览控件MWPhotoBrowser 实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网络下载图片并进行缓存.可对图片进行缩放等操作. 下载:https://github.com/mwaterfall/MWPhotoBrowser 目前比较活跃的社区仍旧是Github,除此以外也有一些不错的库散落在Google Code.SourceForge等地方.由于Github社区太过主流,这里主要介绍一下Github里面流行的iOS库. 首先

解决AFN不支持 &quot;text/html&quot; 的数据的问题

使用AFN若遇到这个错误 Request failed: unacceptable content-type: text/html 如图所示: 解决方法: 本文介绍两种方法, 第一种方法较好, 第二种存在风险, 特此说明,请勿使用第二种!!!! 1.第一种方法: 在懒加载AFHTTPSessionManager 对象时, 告诉AFN,支持接受 text/xml 的数据,代码如下: 1 - (AFHTTPSessionManager *)mgr 2 { 3 if (_mgr == nil) { 4

iOS之AFN简介(1)

AFN的简单介绍 AFNetworking是一款在OS X和iOS下都令人喜爱的网络库. 为了迎合iOS新版本的升级, AFNetworking在3.0版本中删除了基于 NSURLConnection API的所有支持. 如果你的项目以前使用过这些API,建议您立即升级到基于 NSURLSession 的API的AFNetworking的版本.本指南将引导您完成这个过程. 本章是为了引导使用AFNetworking 2.x升级到最新的版本API,以达到过渡的目的,并且解释了新增和更改的设计结构.

SDWebimage 、AFN 、ASI ----- 快捷使用

1.SDWebimage 1> SDWebimage的缓存机制 UIImageView+WebCache: setImageWithURL:placeholderImage:options: 先显示 placeholderImage ,同时由SDWebImageManager 根据 URL 来在本地查找图片. SDWebImageManager: downloadWithURL:delegate:options:userInfo: SDWebImageManager是将UIImageView+W

iOS开发-常用第三方开源框架介绍

iOS开发-常用第三方开源框架介绍 图像: 1.图片浏览控件MWPhotoBrowser 实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网络下载图片并进行缓存.可对图片进行缩放等操作. 下载:https://github.com/mwaterfall/MWPhotoBrowser 目前比较活跃的社区仍旧是Github,除此以外也有一些不错的库散落在Google Code.SourceForge等地方.由于Github社区太过主流,这里主要介绍一下G

WKWebView与JS交互实战技巧之API介绍

前言 前一章我给大家介绍了iOS与HTML5的交互,用的是UIWebView,今天给大家介绍另外一种基于 iOS 8 新推出的 WKWebView 组件,构建出自己的混合开发框架. WKWebView 简介 WKWebView 是苹果在 iOS 8 中引入的新组件,目的是给出一个新的高性能的 Web View 解决方案,摆脱过去 UIWebView 的老旧笨重特别是内存占用量巨大的问题. 苹果将 UIWebViewDelegate 与 UIWebView 重构成了 14 个类和 3 个协议,引入