AFNetworking相关用法和问题点

AFNetworking是一个轻量级的网络请求api类库。是以NSURLConnection,NSOperation和其他方法为基础的。使用时需要导入:Security.framework、MobileCoreServices.framework、SystemConfiguration.framework

一、AFNetworking作用都有哪些?

NSURLConnection提供了+sendAsynchronousRequest:queue:completionHandler:和+sendAsynchronousRequest:queue:completionHandler:,但是AFNetworking提供了更好的功能

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

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

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

4、AFNetworking可以将远程媒体数据类型(NSData)转化为可用的格式,比如如JSON,XML,图像和plist。

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

6、的UIImageView+AFNetworking增加了一个方便的方法来异步加载图像。

二、AFNetworking是否支持缓存?

可以,NSURLCache及其子类提供了很多高级接口用于处理缓存

如果你想将缓存存储再磁盘,推荐使用SDURLCache

三、AFNetworking基本用法

1、如何通过URL获取json数据

第一种,利用AFJSONRequestOperation,官方网站上给的例子:

NSString*str=[NSStringstringWithFormat:@"https://alpha-api.app.net/stream/0/posts/stream/global"];

NSURL*url = [NSURL URLWithString:

[strstringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

NSURLRequest*request = [NSURLRequest requestWithURL:url];

//从URL获取json数据

AFJSONRequestOperation*operation1 = [AFJSONRequestOperation 

JSONRequestOperationWithRequest:requestsuccess:^(NSURLRequest*request,NSHTTPURLResponse*response,NSDictionary* JSON) {

NSLog(@"获取到的数据为:%@",JSON);

}failure:^(NSURLRequest*request,NSHTTPURLResponse*response,NSError*error,iddata) {

NSLog(@"发生错误!%@",error);

}];

[operation1start];

第二种方法,利用AFHTTPRequestOperation先获取到字符串形式的数据,然后转换成json格式,将NSString格式的数据转换成json数据,利用IOS5自带的json解析方法:

NSString*str=[NSStringstringWithFormat:@"https://alpha-api.app.net/stream/0/posts/stream/global"];

NSURL*url = [NSURLURLWithString:

[strstringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

NSURLRequest*request = [NSURLRequestrequestWithURL:url];

AFHTTPRequestOperation*operation = [[AFHTTPRequestOperationalloc]initWithRequest:request];

[operationsetCompletionBlockWithSuccess:^(AFHTTPRequestOperation*operation,idresponseObject) {

NSString*html = operation.responseString;

NSData* data=[htmldataUsingEncoding:NSUTF8StringEncoding];

iddict=[NSJSONSerializationJSONObjectWithData:dataoptions:0error:nil];

NSLog(@"获取到的数据为:%@",dict);

}failure:^(AFHTTPRequestOperation*operation,NSError*error) {

NSLog(@"发生错误!%@",error);

}];

NSOperationQueue*queue = [[NSOperationQueue alloc]init];

[queueaddOperation:operation];

如果发生Error Domain=NSURLErrorDomain Code=-1000 "bad URL" UserInfo=0x14defc80 {NSUnderlyingError=0x14deea10 "bad URL", NSLocalizedDescription=bad URL这个错误,请检查URL编码格式。有没有进行stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding

2、如何使用AFNetworking上传一个文件?

NSData*imageData=UIImagePNGRepresentation(image);

NSURLRequest*request=[clientmultipartFormRequestWithMethod:@"POST"path:@"/upload"parameters:nilconstructingBodyWithBlock:^(idformData){

[formDataappendPartWithFileData:imageDatamimeType:@"image/png"name:@"avatar"];

}];

3、如何使用AFNetworking下载一个文件?

先创建一个AFURLConnectionOperation对象,然后再使用它的属性outputStream进行处理

operation.outputStream=[NSOutputStreamoutputStreamToFileAtPath:@"download.zip"append:NO];

问题一、在iOS9下直接进行HTTP请求是会收到如下错误提示:

App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app‘s Info.plist file.

原因:iOS9中新增App Transport Security(简称ATS)特性, 主要使到原来请求的时候用到的HTTP,都转向TLS1.2协议进行传输。这也意味着所有的HTTP协议都强制使用了HTTPS协议进行传输。

解决办法:在Info.plist中添加NSAppTransportSecurity,类型为dictionary。并在NSAppTransportSecurity下添加NSAllowsArbitraryLoads,类型为Boolean,值为YES。

问题二、网络请求有多个任务时,如何同时取消关闭这些任务呢?

在执行一个任务的时候,记录该operation,将到时候需要同时关闭的operation添加到一个数组中。在需要关闭这些任务时,再将该数组的operation 都cancel掉。

文章出处:http://blog.csdn.net/lishichao706/article/details/49074125

你可能感兴趣的:(AFNetworking相关用法和问题点)