iOS开发

NSURLRequest & NSMutableURLR

2017-06-13  本文已影响155人  AppleTTT

NSURLRequest

Overview

NSURLRequest表示一个以独立于 protocol 和 URL scheme 的URL加载请求;

NSURLRequest封装了加载请求的两个基本数据元素:要加载的URL,以及查询URL内容缓存时使用的策略。

Important:NSURLRequest仅用于封装有关URL请求的信息。 你必须使用其他类(如NSURLSession或NSURLConnection)将这些请求发送到服务器。

NSURLRequest旨在通过添加为你自己的协议特定属性提供访问器方法的类别来扩展以支持其他协议。 这些方法可以通过调用NSURLProtocol方法propertyForKey:inRequest:和setProperty:forKey:inRequest:获取和设置实际值。

NSURLRequest的可变子类是NSMutableURLRequest。

Important:Swift基础框架覆盖提供了URLRequest结构体,它与NSURLRequest类及其可变子类NSMutableURLRequest进行桥接。 URLRequest值类型提供与NSURLRequest引用类型相同的功能,两者可以与Swift代码交互使用,与Objective-C API进行交互。 此行为类似于Swift将标准字符串,数字和集合类型桥接到其相应的Foundation类。

Symbols

Creating Requests




Getting Request Properties






Getting HTTP Request Properties






Allowing Cellular Access

Support for Secure Coding

Constants

typedef enum NSURLRequestCachePolicy : NSUInteger {
    NSURLRequestUseProtocolCachePolicy = 0,
    NSURLRequestReloadIgnoringLocalCacheData = 1,
    NSURLRequestReloadIgnoringLocalAndRemoteCacheData = 4,
    NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData,
    NSURLRequestReturnCacheDataElseLoad = 2,
    NSURLRequestReturnCacheDataDontLoad = 3,
    NSURLRequestReloadRevalidatingCacheData = 5
} NSURLRequestCachePolicy;

对于HTTP协议,NSURLRequestUseProtocolCachePolicy策略的行为在NSURLRequest中。

HTTP和HTTPS的NSURLRequestUseProtocolCachePolicy决策树,如下图:

NSURLRequestCachePolicy决策树.png

简要说明:

  1. 如果该请求不存在缓存的响应,则URL加载系统将从始发源获取数据。

  2. 否则,如果缓存的响应并不表示它必须每次都重新生效,并且如果缓存的响应没有过时(超过其到期日期),则URL加载系统将返回缓存的响应内容。

  3. 如果缓存响应过时或需要重新验证,则URL加载系统会向始发源发出HEAD请求,以查看资源是否已更改。 如果已经更改,URL加载系统将从始发源获取数据。 否则,它返回缓存的响应。

RFC 2616,第13节详细说明了这些语义。

Symbols
  1. NSURLRequestUseProtocolCachePolicy

    指定在协议实现中定义的缓存逻辑,可以用于特定的URL加载请求。 这是URL加载请求的默认策略。
    如果要自定义HTTP或HTTPS在字节范围内请求,请使用NSURLRequestReloadIgnoringLocalCacheData策略。

  2. NSURLRequestReloadIgnoringLocalCacheData

    指定URL加载的数据应该从始发源加载。 不应使用现有的缓存数据来做URL加载请求。

  3. NSURLRequestReloadIgnoringLocalAndRemoteCacheData

    指定不仅应该忽略本地缓存数据,而且应该指示代理和其他中间设备在协议允许的情况下忽略其缓存。
    Important:该常数未实现,不应使用。

  4. NSURLRequestReturnCacheDataElseLoad

    指定现有的缓存数据应用于满足请求,而不管其是否过期。 如果高速缓存中没有现有的数据对应于请求,则从始发源加载数据。

  5. NSURLRequestReturnCacheDataDontLoad

    指定现有的缓存数据应用于满足请求,而不管其是否过期。 如果缓存中没有与URL加载请求相对应的现有数据,不尝试从始发源加载数据,并且认为该加载失败。 此常数指定类似于“离线”模式的行为。

  6. NSURLRequestReloadRevalidatingCacheData

    指定可以使用现有的缓存数据,前提是原始源确认其有效性,否则,URL将从源文件加载。


typedef enum NSURLRequestNetworkServiceType : NSUInteger {
    NSURLNetworkServiceTypeDefault = 0,
    NSURLNetworkServiceTypeVoIP = 1,
    NSURLNetworkServiceTypeVideo = 2,
    NSURLNetworkServiceTypeBackground = 3,
    NSURLNetworkServiceTypeVoice = 4,
    NSURLNetworkServiceTypeCallSignaling = 11
} NSURLRequestNetworkServiceType;
Overview

这些常量用于指定请求的网络服务类型。

网络服务类型为操作系统提供了关于基础流量使用的提示。 这个提示增强了系统优先使用流量的能力,确定唤醒蜂窝或Wi-Fi无线电需要多快等等。 通过提供准确的信息,你可以提高系统最佳平衡电池寿命,性能和其他注意事项的能力。

Symbols
  1. NSURLNetworkServiceTypeDefault

    指定标准网络流量。 大多数连接应该使用这种服务类型。

  2. NSURLNetworkServiceTypeVoIP

    指定该请求用于VoIP请求。
    使用VoIP服务类型,内核在您的应用程序处于后台时继续监听传入流量,然后在新数据到达时唤醒您的应用程序。 这只能用于与VoIP服务进行通信的连接。

  3. NSURLNetworkServiceTypeVideo

    指定请求是针对视频流量。

  4. NSURLNetworkServiceTypeBackground

    指定请求是用于后台流量。
    如果你的应用程序正在执行未被用户请求的下载,则应指定此类型,例如,预取内容,以便在用户选择查看内容时可用。

  5. NSURLNetworkServiceTypeVoice

    指定请求是针对音频流量。

  6. NSURLNetworkServiceTypeCallSignaling

    指定请求是针对呼叫信令流量。(官方文档居然对这个没有解释,我也有点醉~~~)

NSMutableURLRequest

NSMutableURLRequest是NSURLRequest的子类,用于帮助开发人员,他们可能会发现,为一系列URL加载请求对单个请求对象进行突变更为方便,而不是为每个加载创建一个不可变的NSURLRequest对象。

Overview

NSURLSession,NSURLConnection和NSURLDownload类会在其初始化和任务创建方法中将每个NSMutableURLRequest对象的深拷贝传递给它们的。

Reserved HTTP Headers

URL加载系统旨在为我们处理HTTP协议的各个方面。 因此,我们不应使用addValue: forHTTPHeaderField:setValue: forHTTPHeaderField:修改以下头部信息:

a. Authorization(授权);
b. Connection(连接);
c. Host(主机);
d. WWW-Authenticate(WWW身份验证);

Symbols

Setting Request Properties


nil表示没有主文档。

Setting HTTP Specific Properties





Instance Methods

这个方法贼奇怪,苹果的文档里面有这个方法,但是没有任何关于这个方法的解释,在头文件中甚至找不到这个方法;
上一篇 下一篇

猜你喜欢

热点阅读