高级iOS面试题:从 NSURLConnection 到 NSURLSession

1,317 阅读1分钟

1.NSURLConnection 的区别 NSURLSession区别有那些?

NSURLConnection
NSURLsession
与 NSURLConnection 相比,NSURLsession 最直接的改进就是可以配置每个 session 的缓存,协议,cookie,以及证书策略(credential policy),甚至跨程序共享这些信息。这将允许程序和网络基础框架之间相互独立,不会发生干扰。每个 NSURLSession 对象都由一个 NSURLSessionConfiguration 对象来进行初始化,后者指定了刚才提到的那些策略以及一些用来增强移动设备上性能的新选项。
在 iOS 5 中,NSURLConnection 添加了 sendAsynchronousRequest:queue:completionHandler: 这一方法,对于一次性使用的 request, 大大地简化代码,同时它也是 sendSynchronousRequest:returningResponse:error: 这个方法的异步替代品
NSURLSession 在 task 的构造方法上延续了这一模式。不同的是,这里不会立即运行 task,而是将该 task 对象先返回,允许我们进一步的配置,然后可以使用 resume 方法来让它开始运行。

2.NSURLSession 与 NSURLConnection 的 delegate 方法

NSURLSession 既拥有 seesion 的 delegate 方法,又拥有 task 的 delegate 方法用来处理鉴权查询。session 的 delegate 方法处理连接层的问题,诸如服务器信任,客户端证书的评估,NTLM 和 Kerberos 协议这类问题,而 task 的 delegate 则处理以网络请求为基础的问题,如 Basic,Digest,以及代理身份验证(Proxy authentication)等
在 NSURLConnection 中有两个 delegate 方法可以表明一个网络请求已经结束:NSURLConnectionDataDelegate 中的 -connectionDidFinishLoading: 和 NSURLConnectionDelegate 中的 -connection:didFailWithError:,而在 NSURLSession 中改为一个 delegate 方法:NSURLSessionTaskDelegate 的 -URLSession:task:didCompleteWithError:
NSURLSession 中表示传输多少字节的参数类型现在改为 int64_t,以前在 NSURLConnection 中相应的参数的类型是 long long。