[置顶] AFNetworking 2.0 新特性讲解之AFHTTPSessionManager
AFNetworking 2.0 相比1.0 API 接口改动还是很大的. 其中一个便是 AFURLSessionManager,当然如果你不太熟悉,或者为了兼容低版本,你依然可以选择AFHTTPRequestOperationManager,AFURLSessionManager是基于
NSURLSessionConfiguration(IOS 7.0+, MAC OX_9+)的.
下面我们借用TuneStore的API 来完成AFURLSessionManager的讲解.
如果您在看这边文章之前 我建议您首先阅读下AFNetworking2.0的官方新特性介绍.
- AFNetworking 2.0 Migration Guide - 你如果之前用过AF1.0 这个是很有必要来看的.
- AFNetworking 2.0 Docs
- AFNetworking 2.0 Source
另外T*witer 上说NSHipster的AFNetworking现在翻译成中文了,所以我搬过来了有兴趣的朋友也可以去看下,https://github.com/NSHipster/articles/blob/zh-Hans/2013-09-16-afnetworking-2.md
1:创建 client search iTunes
#import "AFHTTPSessionManager.h"@interfaceITunesClient:AFHTTPSessionManager+(ITunesClient*)sharedClient;-(NSURLSessionDataTask*)searchForTerm:(NSString*)term completion:(void(^)(NSArray*results,NSError*error))completion;@end
#import "ITunesClient.h"@implementationITunesClient+(ITunesClient*)sharedClient {staticITunesClient*_sharedClient =nil;staticdispatch_once_t onceToken;
dispatch_once(&onceToken,^{
NSURL *baseURL =[NSURL URLWithString:@"https://itunes.apple.com/"];NSURLSessionConfiguration*config =[NSURLSessionConfiguration defaultSessionConfiguration];[config setHTTPAdditionalHeaders:@{@"User-Agent":@"TuneStore iOS 1.0"}];
//设置我们的缓存大小其中内存缓存大小设置10M 磁盘缓存5M
NSURLCache*cache =[[NSURLCache alloc] initWithMemoryCapacity:10*1024*1024
diskCapacity:50*1024*1024
diskPath:nil];[config setURLCache:cache]; _sharedClient =[[ITunesClient alloc] initWithBaseURL:baseURL
sessionConfiguration:config];
_sharedClient.responseSerializer =[AFJSONResponseSerializer serializer];});return _sharedClient;}-(NSURLSessionDataTask*)searchForTerm:(NSString*)term completion:(void(^)(NSArray*results,NSError*error))completion {NSURLSessionDataTask*task =[self GET:@"/search"
//为了速度我们将地区设置为台湾
parameters:@{@"country":@"TW",@"term": term }
success:^(NSURLSessionDataTask*task, id responseObject){NSHTTPURLResponse*httpResponse =(NSHTTPURLResponse*)task.response;if(httpResponse.statusCode ==200){
dispatch_async(dispatch_get_main_queue(),^{
completion(responseObject[@"results"],nil);});}else{
dispatch_async(dispatch_get_main_queue(),^{
completion(nil,nil);});NSLog(@"Received: %@", responseObject);NSLog(@"Received HTTP %d", httpResponse.statusCode);}} failure:^(NSURLSessionDataTask*task,NSError*error){
dispatch_async(dispatch_get_main_queue(),^{
completion(nil, error);});}];return task;}@end
Note:为了便于对这个任务进行(取消,监控等)操作 我们将这个任务返回.
2: 在view controller对client进行回调
NSURLSessionDataTask*task =[[ITunesClient sharedClient] searchForTerm:term
completion:^(NSArray*results,NSError*error){if(results){self.results = results;[self.tableView reloadData];}else{NSLog(@"ERROR: %@", error);}}];
3: AFNetworking UIKit 之 加载网络图片
每一个cell 我们可以利用 AFNetworking对UIImageView的 category .只需要在文件中导入 #import "UIImageView+AFNetworking.h"
,然后 cellForRowAtIndexPath:
方法下直接使用即可
cell.artworkImageView.image =nil;[cell.artworkImageView cancelImageRequestOperation]; NSURL *imageURL =[NSURL URLWithString:record[@"artworkUrl100"]];if(imageURL){[cell.artworkImageView setImageWithURL:imageURL];}
4:当任务运行时显示 activity indicator
导入 #import "UIActivityIndicatorView+AFNetworking.h"
[self.activityIndicator setAnimatingWithStateOfTask:task];
运行效果如下
[置顶] AFNetworking 2.0 新特性讲解之AFHTTPSessionManager的更多相关文章
- AFNetworking 2.0 新特性讲解之AFHTTPSessionManager
AFNetworking 2.0 新特性讲解之AFHTTPSessionManager (2014-02-17 11:56:24) 转载▼ AFNetworking 2.0 相比1.0 API ...
- Javaweb学习笔记——(七)——————myexlipse基本使用、jdk5.0新特性及反射讲解
1.debug调试模式: *使用这种模式,调试程序(看到程序运行停止在这一行) -显示出来行号 -双击左边,出现一个圆点,表示设置了一个断点 *使用debug as方式,运行程序 -特使是否进入到调试 ...
- webpack 4.0.0-beta.0 新特性介绍
webpack 可以看做是模块打包机.它做的事情是:分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Scss,TypeScript等),并将其打包为合适的格式 ...
- 返璞归真 asp.net mvc (13) - asp.net mvc 5.0 新特性
[索引页][源码下载] 返璞归真 asp.net mvc (13) - asp.net mvc 5.0 新特性 作者:webabcd 介绍asp.net mvc 之 asp.net mvc 5.0 新 ...
- [C#]6.0新特性浅谈
原文:[C#]6.0新特性浅谈 C#6.0出来也有很长一段时间了,虽然新的特性和语法趋于稳定,但是对于大多数程序猿来说,想在工作中用上C#6.0估计还得等上不短的一段时间.所以现在再来聊一聊新版本带来 ...
- C# Note33: 总结C# 6.0/7.0 新特性
先注明,本文主体参考自:C# 6.0新特性 目前代码中使用了很多C#6.0的新特性,下面以Point类来做相关叙述: public class Point { public int X { get; ...
- Servlet 3.0 新特性详解
转自:http://www.ibm.com/developerworks/cn/java/j-lo-servlet30/#major3 Servlet 是 Java EE 规范体系的重要组成部分,也是 ...
- [翻译] C# 8.0 新特性 Redis基本使用及百亿数据量中的使用技巧分享(附视频地址及观看指南) 【由浅至深】redis 实现发布订阅的几种方式 .NET Core开发者的福音之玩转Redis的又一傻瓜式神器推荐
[翻译] C# 8.0 新特性 2018-11-13 17:04 by Rwing, 1179 阅读, 24 评论, 收藏, 编辑 原文: Building C# 8.0[译注:原文主标题如此,但内容 ...
- 【转帖】Servlet 3.0 新特性详解
http://www.ibm.com/developerworks/cn/java/j-lo-servlet30/ Servlet 3.0 新特性概述 Servlet 3.0 作为 Java EE 6 ...
随机推荐
- _BLOCK_TYPE_IS_VALID 问题解析及处理
直接原因: 释放内存时,内存已经被修改或释放. 产生可能: 1.内存越界操作,踩了待释放指针头信息. 2.重复释放指针. 处理: 采用排除法,逐步屏蔽掉一些代码,当屏蔽某些代码时,不抛此异常,说明问题 ...
- thinkphp中表有前缀名的时候申明模板的方法
$Model=new \Home\Model\Stu_activityModel; $Model=D('Stu_activity');//错误的声明不了
- phpexcel的写出操作(生成excel表)
/* thinkphp3.2 ThinkPHP/Library/Org/Util/ 放置位置 http://files.cnblogs.com/files/youligai/phpexcel.zip ...
- PHP substr截取中文字符出现乱码的问题解疑
我们在使用PHP substr截取中文字符的时候,经常会出现乱码的情况,导致程序无法正常运行,这时怎么引起的呢?通过分析,我们知道,主要是substr可能硬生生的将一个中文字符“锯”成两半.解决办法: ...
- #Leet Code# Root to leaf
语言:Python 描述:使用递归实现 def getList(self, node): if node is None: return [] if node.left is None and nod ...
- MFC学习指南大纲
最近一直在做MFC的项目,顺便学习一下以下MFC核心知识吧: 大纲: 1. 消息队列 2. send message 3. post message 4. 面向对象编程 5. 指针 一个一个来学习哈.
- hdu 2012 素数判定 Miller_Rabbin
素数判定 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- iOS获取键盘的高度
- [wikioi]数字三角形
http://wikioi.com/problem/1220/ 最基本经典的DP题目,唯一有点意思的是,自底向上计算会更简洁.另外对这种+方式累计的DP,可以直接把原来的存进去,然后再加,本质是不用在 ...
- 用F340 GPIO做I2C
在和Qinheng开发小尺寸点灯治具中,F340和FPGA采用I2C通信,其中F340作为I2C的主机,I2C端口用自己的GPIO编写,总结遇到的问题及注意事项: 1. F340端口及上拉电阻设置: ...