NSURLConnection / NSURLSession/ SDWebImage
1. NSURLConnection (iOS9开始被弃用)===========================================
此类的对象加载一个URL请求对象,通过异步/同步的方式发送请求,并获得响应。
此类位于Foundation框架下,继承自NSObject
------------------------------
异步/同步?
通讯方式
异步:在请求发送后,无需等待响应结果,而是可以继续后续其他操作,该请求的响应在回调方法中处理(通常用到的代理方法或block)。
同步: 相对于异步,请求发送后,需在得到响应结果后,再进行后续其他操作。
iOS的开发中,大部分的请求是通过异步方式发送。
------------------------------
2. 使用NSURLConnection(异步)
-异步方式一:(使用代理)
> 指定 Controller 要实现的该类的协议名称 <NSURLConnectionDataDelegate>
> 创建NSURL对象
[NSURL URLWithString:]; // 注意:若url中有中文,需进行转码处理,否则服务器端可能无法识别url中的参数 [string stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]
> 创建NSURLRequest对象
[NSURLRequest requestWithURL:]
> 使用NSURLConnection加载并异步发送urlRequest,默认GET方式
方式一:[NSURLConnection connectionWithRequest: delegate: ]
方式二:[[NSURLConnection alloc] initWithRequest: delegate: ]
> 实现协议方法
// 客户端收到了服务端的响应,只是收到了一个招呼,此时请求的数据还没发到客户端
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
// 开始接收数据,注意此时接收的数据不一定是完整的。服务端发送数据时可能会分包发送,特别在一次请求的数据量很大时。所以事先需要先定义个可变变量,当数据接收到时,不断累加数据到此变量中。
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
// 数据完全接收完毕,此时可在此处理解析数据,并展示到界面上。
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
-异步方式二:(使用block)
[NSURLConnection sendAsynchronousRequest:urlRequest queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse* response, NSData* data, NSError* connectionError) {
// 在此处理接收的数据:response-> 服务端的响应;data-> 被请求的数据;connectionError-> 连接过程中发生的错误
}];
3. 数据解析json 或xml
若返回结果为json 或xml格式的数据时,需要对数据解析后显示。
解析json数据:
使用NSJSONSerialization 类。
// 将响应获得的NSData数据转换为对象
[NSJSONSerialization JSONObjectWithData: options: error:];
/* options: 可选选项值:NSJSONReadingAllowFragments -> 允许json字符串最外层既不是NSArray 也不是NSDictionary 但必须是有效的json fragment, 例如此选项下可解析 @“ABC” 这种字符串;
NSJSONReadingMutableLeaves-> 返回json对象中字符串类型为NSMutableString;
NSJSONReadingMutableContainers -> 返回可变容器,如NSMutableDictionary, NSMutableArray
可根据son串的数据形式转换成对应类型的对象,如NSArray, NSDictionary, NSString 等。*/
// 将json对象 转换为NSData (若需向服务器发送json格式数据时需要)
+ (nullable NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError **)error;
4. 使用NSURLConnection(同步)
无需代理或block,但考虑到用户体验,同步的方式使用的较少。
> 创建NSURL对象
[NSURL URLWithString:];
> 发送同步请求
方式一:[NSData dataWithContentsOfURL:]
方式二:[NSString stringWithContentsOfURL: encoding: error: ] // 前提是得到的响应数据可用字符串表示; NSData与NSString 的转换
方式三:
> 创建NSURLRequest对象
[NSURLRequest requestWithURL:]
> [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err]
1. NSURLSession =======================================================
NSURLConnection的继任者,自iOS7出现。
2. NSURLSession 使用
> 创建NSURL对象
[NSURL URLWithString:];
> 创建NSURLRequest对象
[NSURLRequest requestWithURL:]
> 创建共享会话(会话的创建方式有多种)
[NSURLSession sharedSession]
> 在会话下创建数据任务(任务分三种:数据,上传,下载,后续学习其他)
NSURLSessionDataTask 会话的数据任务,在一个会话中可创建多个任务,任务类型,可相同,也可不同。
*task = [session dataTaskWithRequest:request completionHandler:^(NSData *data,NSURLResponse *response,NSError *err) {
// 处理接收的数据
}];
> 启动任务(对任务的操作还有暂停,取消,相比NSURLConnection更加灵活)
[task resume]
1. SDWebImage======================================================
第三方开源库,用于处理网络图片的加载。
官方地址:https://github.com/rs/SDWebImage
2. 使用方式:
三种:
a. 使用Cocoapods (第三方库管理)
b. 拷贝所有文件到你的工程中
c. 将SDWebImage作为静态库引入到工程中。
介绍第三种方式c:
> 下载并解压SDWebImage工程
> 在你的工程目录下右键“Add Files to…”
> 选择SDWebImage.xcodeproj
> 确认“Copy items into destination group’s folder(if needed)” 是选中的。
> 在你的工程设置中,找到“Build Phases”->”Link Binary With Libraries”
> 点击”+”,选择 “ImageIO.framework”
> 再点击“+”,选择“libSDWebImage.a”
> “Build Settings”-> “Linking”->”Other Linker Flags” 设置为“-ObjC”
// 可以正式使用了
> 在你的工程里需要处理网络图片的类文件中
#import <SDWebImage/UIImageView+WebCache.h>
[imageView sd_setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]
placeholderImage:[UIImage imageNamed:@"placeholder.png"]
completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
... completion code here ...
}];
或者:
[imageView sd_setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]
placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
NSURLConnection / NSURLSession/ SDWebImage的更多相关文章
- 文件下载(NSURLConnection/NSURLSession)
最基本的网络文件下载(使用原生的网络请求) #pragma mark - 小文件下载 // 方法一: NSData dataWithContentsOfURL - (void)downloadFile ...
- iOS NSURLSession VS NSURLConnection
NSURLSession VS NSURLConnection NSURLSession可以看做是NSURLConnection的进化版,其对NSURLConnection的改进点有: * 根据每个S ...
- NSURLSession 相关清单
浅析 NSURLSession http://boboshone.com/blog/2013/10/21/nsurlsession-tutorial/ 介绍整体流程结构. iOS NSURL ...
- 实战iOS7之NSURLSession
NSURLSession VS NSURLConnection NSURLSession可以看做是NSURLConnection的进化版,其对NSURLConnection的改进点有: * 根据每个S ...
- iOS-技巧性总结
1.AFN与ASI对比 -- AFN1. 基于 NSURLConnection & NSURLSession 进行的封装2. 使用简单3. 提供了自动的序列化 & 反序列化支持! AF ...
- ios升级<注:来着微信平台>
<来着微信平台> http://mp.weixin.qq.com/s?__biz=MjM5NTIyNTUyMQ==&mid=2709545194&idx=1&sn ...
- 2015最新iOS学习线路图
iOS是由苹果公司开发的移动操作系统,以xcode为主要开发工具,具有简单易用的界面.令人惊叹的功能,以及超强的稳定性,已经成为iPhone.iPad 和iPod touch 的强大基础:iOS 内置 ...
- 这可能是最详细的 iOS 学习入门指南(含书目/文档/学习资料)
1 零基础小白如何进行 iOS 系统学习 首先,学习目标要明确: 其次,有了目标,要培养兴趣,经常给自己一些正面的反馈,比如对自己的进步进行鼓励,在前期小步快走: 再次,学技术最重要的一点就是多动手. ...
- Http/2 升级指南
[转]http://www.syyong.com/architecture/http2.html HTTP/2(最初名为HTTP/2.0)是 WWW 使用的 HTTP 网络协议的主要版本. 它来自早先 ...
随机推荐
- WireShark告诉你ping百度时都发生了什么
备注: 测试机器为Mac 重点展示本机发出icmp的过程(dns-->arp-->icmp) 本机默认网关 ->route -n get e -n get default rout ...
- windows10下安装face_recongnition
第一步:安装vistual studio,我安装的是最新版本2017. 另外,并且因为要学习C# ,选了所需要的东西.暂不知这一步是否必需. 第二步:接下来安装boost 通过此链接:https:// ...
- ThinkPHP框架基础知识三
一.JS文件与Css文件存放位置 其实JS与Css文件放在任意位置都可以找到,只要路径正确就行. 在TP框架中我们访问的所有文件都要走入口文件index.php,相当于访问的是index.php页面. ...
- OPNET 安装运行问题总结
OPNET作为专业级网络仿真软件,其强大的功能使其在多个领域有广泛的应用.“越强大的软件,安装越闹心”,OPNET就是这样一款安装和运行的都很闹心的软件,这里简单转载和记录我安装OPNET和使用中的问 ...
- ros使用时的注意事项&技巧
1.rosrun package-name executable-name 比如 rosrun turtlesim turtlesim_node 2.一旦启动roscore后,便可以运行ROS程序了. ...
- 用VS2013编译FFMPEG232
http://blog.csdn.net/finewind/article/details/38854517 如果只是拿来使用,网上有现成的SDK.但我是想深入研究FFMPEG代码,又不熟悉Linux ...
- Spring MVC 之传递模型数据到视图中
类似于 JSP-Servlet 中的 req.setAttribute . req.getSession().setAttribute ... --> 最后在 JSP 用 EL 表达式取得这些数 ...
- sublime text3配置ctrl+鼠标左键进行函数跳转【转】
本文转载自:https://blog.csdn.net/shangdibaozi/article/details/77503426 点击Preferences->Browse Packages进 ...
- Linux上超酷的命令行扩展工具Oh My Zsh
Oh My Zsh 是一款社区驱动的命令行工具,正如它的主页上说的,Oh My Zsh 是一种生活方式.它基于 zsh 命令行,提供了主题配置,插件机制,已经内置的便捷操作.给我们一种全新的方式使用命 ...
- var与this定义变量的区别以及疑惑
我们知道: var可以定义一个局部变量,当然如果var定义在最外层的话,就是全局的局部变量,也就算是全局变量了. 而this关键字定义的变量准确的说应该算是成员变量.即定义的是调用对象的成员变量. 另 ...