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的更多相关文章

  1. 文件下载(NSURLConnection/NSURLSession)

    最基本的网络文件下载(使用原生的网络请求) #pragma mark - 小文件下载 // 方法一: NSData dataWithContentsOfURL - (void)downloadFile ...

  2. iOS NSURLSession VS NSURLConnection

    NSURLSession VS NSURLConnection NSURLSession可以看做是NSURLConnection的进化版,其对NSURLConnection的改进点有: * 根据每个S ...

  3. NSURLSession 相关清单

    浅析 NSURLSession      http://boboshone.com/blog/2013/10/21/nsurlsession-tutorial/ 介绍整体流程结构. iOS NSURL ...

  4. 实战iOS7之NSURLSession

    NSURLSession VS NSURLConnection NSURLSession可以看做是NSURLConnection的进化版,其对NSURLConnection的改进点有: * 根据每个S ...

  5. iOS-技巧性总结

    1.AFN与ASI对比 -- AFN1. 基于 NSURLConnection & NSURLSession 进行的封装2. 使用简单3. 提供了自动的序列化 & 反序列化支持! AF ...

  6. ios升级<注:来着微信平台>

    <来着微信平台>  http://mp.weixin.qq.com/s?__biz=MjM5NTIyNTUyMQ==&mid=2709545194&idx=1&sn ...

  7. 2015最新iOS学习线路图

    iOS是由苹果公司开发的移动操作系统,以xcode为主要开发工具,具有简单易用的界面.令人惊叹的功能,以及超强的稳定性,已经成为iPhone.iPad 和iPod touch 的强大基础:iOS 内置 ...

  8. 这可能是最详细的 iOS 学习入门指南(含书目/文档/学习资料)

    1 零基础小白如何进行 iOS 系统学习 首先,学习目标要明确: 其次,有了目标,要培养兴趣,经常给自己一些正面的反馈,比如对自己的进步进行鼓励,在前期小步快走: 再次,学技术最重要的一点就是多动手. ...

  9. Http/2 升级指南

    [转]http://www.syyong.com/architecture/http2.html HTTP/2(最初名为HTTP/2.0)是 WWW 使用的 HTTP 网络协议的主要版本. 它来自早先 ...

随机推荐

  1. 【算法题12 解码方法decode way】

    1.来源LeetCode91 一条包含字母 A-Z 的消息通过以下方式进行了编码: 'A' -> 1 'B' -> 2 ... 'Z' -> 26 给定一个只包含数字的非空字符串,请 ...

  2. go——结构

    Go语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型.结构体是由一系列具有相同类型或不同类型的数据构成的数据集合. 结构体定义需要使用type和struct语句.str ...

  3. go——常量

    常量是一个简单值的标识符,在程序运行时,不会被修改的量常量中的数据类型只可以是布尔值.数字型(整数型.浮点型和复数)和字符串.常量的定义格式: const identifier [type] = va ...

  4. s5_day5作业

    # 1.写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成批量修改操作 # def number_file(file,change_s,change): # import os # with ...

  5. smarty内置函数

      1.{append} 追加 2.{assign} 赋值 3.{block} 块 4.{call} 调用 5.{capture}捕获 6.{config_load}用来从配置文件中加载config变 ...

  6. 让Jackson JSON生成的数据包含的中文以unicode方式编码

      本文出处:http://blog.csdn.net/chaijunkun/article/details/8257209,转载请注明.由于本人不定期会整理相关博文,会对相应内容作出完善.因此强烈建 ...

  7. MySQL-5.7 DELETE语句详解

    1.语法 (1)单表 DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [PARTITION (partition_name [, partit ...

  8. shell-最近7天目录

    #采用将最近7天的日期放入到数组中,遍历整个目录,将这7天的目录连接成一个字符串paths. #注意: .日期目录里面的文件只是做了简单的以part开头的匹配. # .path路径是日期的上一层,以/ ...

  9. codeforces 703B

    题意:有n座城市,其中k座是省会城市,每个城市有对应的点权,城市1-2-3-...-n-1有一条路相连,省会城市与其他所有的城市相连,且每两个城市间最多有一条路,每条路的边权为路连接的两座城市的点权乘 ...

  10. ViewPager实现图片的轮播

    在app中图片的轮播显示可以说是非常常见的实现效果了,其实现原理不过是利用ViewPager,然后利用handler每隔一定的时间将ViewPager的currentItem设置为当前item的pos ...