天天看点

iOS - NSURLConnection 网络请求前言1、NSURLConnection2、NSURLConnection 同步 GET 请求3、NSURLConnection 同步 POST 请求4、NSURLConnection 异步 GET 请求5、NSURLConnection 异步 POST 请求6、NSURLConnection 文件下载7、NSURLConnection 下载单例封装

NSURLConnection 提供了两种方式来实现连接,一种是同步的另一种是异步的,异步的连接将会创建一个新的线程,这个线程将会来负责下载的动作。而对于同步连接,在下载连接和处理通讯时,则会阻塞当前调用线程。

许多开发者都会认为同步的连接将会堵塞主线程,其实这种观点是错误的。一个同步的连接是会阻塞调用它的线程。如果你在主线程中创建一个同步连接,没错,主线程会阻塞。但是如果你并不是从主线程开启的一个同步的连接,它将会类似异步的连接一样。因此这种情况并不会堵塞你的主线程。事实上,同步和异步的主要区别就是运行 runtime 为会异步连接创建一个线程,而同步连接则不会。

1、NSURL:请求地址;

2、NSURLRequest:封装一个请求,保存发给服务器的全部数据,包括一个 NSURL 对象,请求方法、请求头、请求体 ....;

3、NSMutableURLRequest:NSURLRequest 的子类

4、NSURLConnection:负责发送请求,建立客户端和服务器的连接。发送 NSURLRequest 的数据给服务器,并收集来自服务器的响应数据。

1、创建一个 NSURL 对象,设置请求路径(设置请求路径);

2、传入 NSURL 创建一个 NSURLRequest 对象,设置请求头和请求体(创建请求对象);

任何 NSURLRequest 默认都是 GET 请求。

3、使用 NSURLConnection 发送 NSURLRequest(发送请求)。

发送同步请求:有返回值。

发送异步请求:没有返回值。

使用 NSURLConnection 的 sendSynchronousRequest:returningResponse:error: 类方法,我们可以进行同步请求。

在创建一个同步的网络连接的时候我们需要明白一点,并不是是我们的这个同步连接一定会堵塞我们的主线程,如果这个同步的连接是创建在主线程上的,那么这种情况下是会堵塞我们的主线程的,其他的情况下是不一定会堵塞我们的主线程的。例如如果在 GCD 的全局并发队列上初始化了一个同步的连接,其实并不会堵塞我们的主线程的。

发送异步请求有两种方式:

1)使用 block 回调:

2)代理:

创建网络连接后可以不使用 start,系统会自动开始网络连接。

取消一个请求后,连接不在调用代理方法,如果希望再此连接,需要再次创建一个新的网络连接。

NSURLConnectionDownloadDelegate 代理方法是为 Newsstand Kit’s(杂志包) 创建的下载服务的,Newsstand 主要在国外使用比较广泛,国内极少。

如果使用 NSURLConnectionDownloadDelegate 代理方法监听下载进度,能够监听到进度,但是找不到下载的文件。

Objective-C

Swift

使用 block 回调方式

使用 协议 方式

使用 闭包 方式

使用 闭包 回调方式

QDownloaderOperation.h

QDownloaderOperation.m

QDownloaderManager.h

QDownloaderManager.m

ViewController.m

继续阅读