AFN

一、2大管理对象
1.AFHTTPRequestOperationManager
* 对NSURLConnection的封装

2.AFHTTPSessionManager
* 对NSURLSession的封装

二、AFHTTPRequestOperationManager的具体使用
1.创建管理者
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];

2.封装请求参数
NSMutableDictionary *params = [NSMutableDictionary dictionary];
params[@"username"] = @"哈哈哈";
params[@"pwd"] = @"123";

3.发送请求
NSString *url = @"http://localhost:8080/MJServer/login";
[mgr POST:url parameters:params
success:^(AFHTTPRequestOperation *operation, id responseObject) {
// 请求成功的时候调用这个block
NSLog(@"请求成功---%@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
// 请求失败的时候调用调用这个block
NSLog(@"请求失败");
}];
// GET请求
[mgr GET:url parameters:params
success:^(AFHTTPRequestOperation *operation, id responseObject) {
// 请求成功的时候调用这个block
NSLog(@"请求成功---%@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
// 请求失败的时候调用调用这个block
NSLog(@"请求失败");
}];

三、对服务器返回数据的解析
1.AFN可以自动对服务器返回的数据进行解析
* 默认将服务器返回的数据当做JSON来解析

2.设置对服务器返回数据的解析方式
1> 当做是JSON来解析(默认做法)
* mgr.responseSerializer = [AFJSONResponseSerializer serializer];
* responseObject的类型是NSDictionary或者NSArray

2> 当做是XML来解析
* mgr.responseSerializer = [AFXMLParserResponseSerializer serializer];
* responseObject的类型是NSXMLParser

3> 直接返回data
* 意思是:告诉AFN不要去解析服务器返回的数据,保持原来的data即可
* mgr.responseSerializer = [AFHTTPResponseSerializer serializer];

3.注意
* 服务器返回的数据一定要跟responseSerializer对得上
1> 服务器返回的是JSON数据
* AFJSONResponseSerializer
* AFHTTPResponseSerializer

2> 服务器返回的是XML数据
* AFXMLParserResponseSerializer
* AFHTTPResponseSerializer

3> 服务器返回的是其他数据
* AFHTTPResponseSerializer

ASI

一、发送请求的2个对象
1.发送GET请求:ASIHttpRequest

2.发送POST请求:ASIFormDataRequest
* 设置参数
// 同一个key只对应1个参数值,适用于普通“单值参数”
- (void)setPostValue:(id <NSObject>)value forKey:(NSString *)key
// 同一个key(同一个参数名),会对应多个参数值,适用于“多值参数”
- (void)addPostValue:(id <NSObject>)value forKey:(NSString *)key

二、发送请求
1.同步请求
* startSynchronous

2.异步请求
* startAsynchronous

三、监听请求的过程
1.如何监听请求过程
1> 为代理,遵守ASIHTTPRequestDelegate协议,实现协议中的代理方法
request.delegate = self;
- (void)requestStarted:(ASIHTTPRequest *)request;
- (void)request:(ASIHTTPRequest *)request didReceiveResponseHeaders:(NSDictionary *)responseHeaders;
- (void)request:(ASIHTTPRequest *)request didReceiveData:(NSData *)data;
- (void)requestFinished:(ASIHTTPRequest *)request;
- (void)requestFailed:(ASIHTTPRequest *)request;

2> 成为代理,不遵守ASIHTTPRequestDelegate协议,自定义代理方法
request.delegate = self;
[request setDidStartSelector:@selector(start:)];
[request setDidFinishSelector:@selector(finish:)];

3> 设置block
[request setStartedBlock:^{
NSLog(@"setStartedBlock");
}];
[request setHeadersReceivedBlock:^(NSDictionary *responseHeaders) {
NSLog(@"setHeadersReceivedBlock--%@", responseHeaders);
}];
[request setDataReceivedBlock:^(NSData *data) {
NSLog(@"setDataReceivedBlock--%@", data);
}];
[request setCompletionBlock:^{
NSLog(@"setCompletionBlock");
}];
[request setFailedBlock:^{
NSLog(@"setFailedBlock");
}];

2.监听的使用注意
* 如果同时设置了block和实现了代理方法,请求过程中,block和代理方法都会调用
* 一般的调用顺序:代理方法 > block

3.如果实现了下面的代理方法,那么responseData\responseString就没有值
- (void)request:(ASIHTTPRequest *)request didReceiveData:(NSData *)data;

四、文件下载
1.一般的下载
1> 设置文件下载的保存路径
request.downloadDestinationPath = filepath;

2> 设置进度监听的代理(要想成为进度监听代理,最好遵守ASIProgressDelegate协议)
request.downloadProgressDelegate = self.progressView;

2.断点下载(断点续传)
1> 设置文件下载的临时路径
request.temporaryFileDownloadPath = tempFilepath;

2> 设置支持断点续传
request.allowResumeForFileDownloads = YES;

五、文件上传(设置文件参数)
1.如果知道文件路径,最好就用这个方法(因为简单)
// ASI内部会自动识别文件的MIMEType
[request setFile:file forKey:@"file"];
[request addFile:file forKey:@"file"];
[request setFile:file withFileName:@"basic.pptx" andContentType:@"application/vnd.openxmlformats-officedocument.presentationml.presentation" forKey:@"file"];
// .....

2.如果文件数据是动态产生的,就用这个方法(比如刚拍照完获得的图片数据)
[request setData:data withFileName:@"test.png" andContentType:@"image/png" forKey:@"file"];

六、ASIHttpRequest的常见用法
1.请求超时
@property (atomic, assign) NSTimeInterval timeOutSeconds;

2.获得错误信息
@property (atomic, retain) NSError *error;

3.获得响应数据
// 状态码
@property (atomic, assign,readonly) int responseStatusCode;
// 状态信息
@property (atomic, retain,readonly) NSString *responseStatusMessage;
// 服务器返回的具体数据(NSString格式)
- (NSString *)responseString;
// 服务器返回的具体数据(NSData格式)
- (NSData *)responseData;

AFN、ASI区别

一、底层实现
1> AFN的底层基于OC的NSURLConnection和NSURLSession
2> ASI的底层基于纯C语言的CFNetwork框架
3> ASI的运行性能 高于 AFN

二、对服务器返回的数据处理
1> ASI没有直接提供对服务器数据处理的方式,直接返回data\string
2> AFN提供了多种对服务器数据处理的方式
* JSON处理
* XML处理
* 其他处理

三、监听请求的过程
1> AFN提供了success和failure两个block来监听请求的过程(只能监听成功和失败)
* success : 请求成功后调用
* failure : 请求失败后调用

2> ASI提供了3套方案,每一套方案都能监听请求的完整过程
(监听请求开始、接收到响应头信息、接受到具体数据、接受完毕、请求失败)
* 成为代理,遵守协议,实现协议中的代理方法
* 成为代理,不遵守协议,自定义代理方法
* 设置block

四、在文件下载和文件上传的使用难易度
1> AFN
* 不容易监听下载进度和上传进度
* 不容易实现断点续传
* 一般只用来下载不大的文件

2> ASI
* 非常容易实现下载和上传
* 非常容易监听下载进度和上传进度
* 非常容易实现断点续传
* 下载或大或小的文件都行

五、ASI提供了更多的实用功能
1> 控制圈圈要不要在请求过程中转
2> 可以轻松地设置请求之间的依赖:每一个请求都是一个NSOperation对象
3> 可以统一管理所有请求(还专门提供了一个叫做ASINetworkQueue来管理所有的请求对象)
* 暂停\恢复\取消所有的请求
* 监听整个队列中所有请求的下载进度和上传进度

SDWebImage

一、cell的图片下载
1> 如何防止一个url对应的图片重复下载
* “cell下载图片思路 – 有沙盒缓存”

2> SDWebImage的默认缓存时长是多少?
* 1个星期

3> SDWebImage底层是怎么实现的?
* “cell下载图片思路 – 有沙盒缓存”

                                   (摘自北京传智播客MJ老师课件)

2.SDWebImage
1> 常用方法

- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder;
- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options;
- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock;
- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock;

2> 内存处理:当app接收到内存警告时

/**
* 当app接收到内存警告
*/
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
{
SDWebImageManager *mgr = [SDWebImageManager sharedManager]; // 1.取消正在下载的操作
[mgr cancelAll]; // 2.清除内存缓存
[mgr.imageCache clearMemory];
}

3> SDWebImageOptions
* SDWebImageRetryFailed : 下载失败后,会自动重新下载
* SDWebImageLowPriority : 当正在进行UI交互时,自动暂停内部的一些下载操作
* SDWebImageRetryFailed | SDWebImageLowPriority : 拥有上面2个功能

第三方框架、AFN、ASI、SDWebImage的更多相关文章

  1. [ 流行的网络框架 ] AFN & ASI

    1.AFN & ASI(早已经停止更新,但现在许多公司也在使用.) AFNetWorking地址:https://github.com/AFNetworking/AFNetworking AS ...

  2. iOS - 第三方框架 - AFN

    #5.AFNetworking 2.6使用方法 >2.6版本 支持 iOS7以上,而且支持NSURLConnectionOperation >3.0版本 支持 iOS7以上 NSURLCo ...

  3. iOS:网络编程的第三方框架:AFNetworking、SDWebImage

    网络编程第三方框架:AFNetworking.SDWebImage 介绍:这些框架是开源的,经过前人的封装.改进,成为使用次数很多的一个性能好的源代码框架,只需要将它导入项目中,就可以使用.因此,在做 ...

  4. iOS开发常用的第三方框架

    1. AFNetworking 在众多iOS开源项目中,AFNetworking可以称得上是最受开发者欢迎的库项目.AFNetworking是一个轻量级的iOS.Mac OS X网络通信类库,现在是G ...

  5. iOS技术面试07:第三方框架

    1ios框架分为:cocoa Touch:UIKit.Foundation.附属框架 Media:OpenGL ES.EAGL.Quartz.Core Animation.Core Audio.    ...

  6. FMDB第三方框架

    FMDB是同AFN,SDWebImage同样好用的第三方框架,它以OC的方式封装了SQLite的C语言API,使得开发变得简单方便. 附上github链接https://github.com/ccgu ...

  7. iOS开发之常用第三方框架(下载地址,使用方法,总结)

    iOS开发之常用第三方框架(下载地址,使用方法,总结) 说句实话,自学了这么久iOS,如果说我不知道的但是又基本上都摸遍了iOS相关知识,但是每次做项目的时候,遇到难一点的地方或者没试过的东西就闷了. ...

  8. iOS-常用的第三方框架的介绍

    写iOS 程序的时候往往需要很多第三方框架的支持,可以大大减少工作量,讲重点放在软件本身的逻辑实现上. GitHub 里面有大量优秀的第三方框架,而且 License 对商业很友好.一下摘录一下几乎每 ...

  9. GitHub 里面有大量优秀的第三方框架

    写iOS 程序的时候往往需要很多第三方框架的支持,可以大大减少工作量,讲重点放在软件本身的逻辑实现上. GitHub 里面有大量优秀的第三方框架,而且 License 对商业很友好.一下摘录一下几乎每 ...

随机推荐

  1. C#使用System.Data.SQLite操作SQLite

    使用System.Data.SQLite 下载地址:http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki 得到Sy ...

  2. ecmall二次开发 直接实例化mysql对象

    $db = &db(); // 第一步赋值数据库类库, $db->query(sql); // 第二步执行mysql 语句; 常用的数据库函数: 得到一行数据 $user=$db-> ...

  3. range与xrange之间的差异(转)

    range 函数说明:range([start,] stop[, step]),根据start与stop指定的范围以及step设定的步长,生成一个序列.range示例: >>> ra ...

  4. lua分割字符串终究版(转载,有改动)

    来源http://codepad.org/BRHIS6WA --根据首字节获取UTF8需要的字节数 local function GetUTF8CharLength(ch) local utf8_lo ...

  5. The LMAX disruptor Architecture--转载

    原文地址: LMAX is a new retail financial trading platform. As a result it has to process many trades wit ...

  6. Python xml 解析百度糯米信息

    先利用爬虫利用百度糯米提供的api来采集北京当天的团购信息,保存为numi.html import xml.etree.ElementTree as ET import os class Nuomi( ...

  7. jquery相关代码

    1.jquery获取当前选中select的text值 var checkText=$("#slc1").find("option:selected").text ...

  8. solr中通过SFTP访问文件建立索引

    需求: 从oracle数据库中根据记录的文件名filename_html(多个文件以逗号隔开),文件路径path,备用文件名bakpath中获取 主机172.21.0.31上对应的html文件内容,并 ...

  9. FVDI Commander products be replaced SVDI tools,really?

    You may have heard that some FVDI Commander products are being replaced by the new SVDI tools. This ...

  10. [JavaEE] WEB-INF有关的目录路径总结

    1.资源文件只能放在WebContent下面,如 CSS,JS,image等.放在WEB-INF下引用不了. 2.页面放在WEB-INF目录下面,这样可以限制访问,提高安全性.如JSP,html 3. ...