在前面幾篇博客中,介紹了iOS開發中的網絡編程相關內容而且介紹了經常使用了兩個平行的網絡框架NSURLSession和NSURLConnection。不管是NSURLSession類仍是NSURLConnection類,其網絡請求都是經過NSURLRequest類進行發起的,本篇博客將介紹NSURLRequest類的用法和其中請求屬性的設置。編程
前幾篇博客地址以下:緩存
1.iOS網絡框架介紹:http://my.oschina.net/u/2340880/blog/618460。安全
2.NSURLSesstion的使用:http://my.oschina.net/u/2340880/blog/618888。服務器
3.NSURLConnection的使用:http://my.oschina.net/u/2340880/blog/618920。cookie
//經過類方法建立默認的請求對象 /* 經過這種方式建立的請求對象 默認使用NSURLRequestUseProtocolCachePolicy緩存邏輯 默認請求超時時限爲60s */ + (instancetype)requestWithURL:(NSURL *)URL; //返回一個BOOL值 用於判斷是否支持安全編碼 + (BOOL)supportsSecureCoding; //請求對象的初始化方法 建立時設置緩存邏輯和超時時限 + (instancetype)requestWithURL:(NSURL *)URL cachePolicy:(NSURLRequestCachePolicy)cachePolicy timeoutInterval:(NSTimeInterval)timeoutInterval; //init方法進行對象的建立 默認使用NSURLRequestUseProtocolCachePolicy緩存邏輯 默認請求超時時限爲60s - (instancetype)initWithURL:(NSURL *)URL; //init方法進行對象的建立 - (instancetype)initWithURL:(NSURL *)URL cachePolicy:(NSURLRequestCachePolicy)cachePolicy timeoutInterval:(NSTimeInterval)timeoutInterval; //只讀屬性 獲取請求對象的URL @property (nullable, readonly, copy) NSURL *URL; //只讀屬性 緩存策略枚舉 /* NSURLRequestCachePolicy枚舉以下: typedef NS_ENUM(NSUInteger, NSURLRequestCachePolicy) { //默認的緩存協議 NSURLRequestUseProtocolCachePolicy = 0, //不管有無本地緩存數據 都進行重新請求 NSURLRequestReloadIgnoringLocalCacheData = 1, //忽略本地和遠程的緩存數據 未實現的策略 NSURLRequestReloadIgnoringLocalAndRemoteCacheData = 4, //不管有無緩存數據 都進行重新請求 NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData, //先檢查緩存 若是沒有緩存再進行請求 NSURLRequestReturnCacheDataElseLoad = 2, //相似離線模式,只讀緩存 不管有無緩存都不進行請求 NSURLRequestReturnCacheDataDontLoad = 3, //未實現的策略 NSURLRequestReloadRevalidatingCacheData = 5, // Unimplemented }; */ @property (readonly) NSURLRequestCachePolicy cachePolicy; //只讀屬性 獲取請求的超時時限 @property (readonly) NSTimeInterval timeoutInterval; //請求主文檔地址 @property (nullable, readonly, copy) NSURL *mainDocumentURL; //獲取網絡請求的服務類型 枚舉以下 /* typedef NS_ENUM(NSUInteger, NSURLRequestNetworkServiceType) { NSURLNetworkServiceTypeDefault = 0, // Standard internet traffic NSURLNetworkServiceTypeVoIP = 1, // Voice over IP control traffic NSURLNetworkServiceTypeVideo = 2, // Video traffic NSURLNetworkServiceTypeBackground = 3, // Background traffic NSURLNetworkServiceTypeVoice = 4 // Voice data }; */ @property (readonly) NSURLRequestNetworkServiceType networkServiceType; //獲取是否容許使用服務商蜂窩網絡 @property (readonly) BOOL allowsCellularAccess;
NSURLRequest請求類除了在初始化時能夠設定一些屬性,建立出來後則大部分屬性都爲只讀的,沒法設置與修改。另外一個類NSMutableURLRequest能夠更加靈活的設置請求的相關屬性。網絡
//設置請求的URL @property (nullable, copy) NSURL *URL; //設置請求的緩存策略 @property NSURLRequestCachePolicy cachePolicy; //設置超時時間 @property NSTimeInterval timeoutInterval; //請求主文檔地址 @property (nullable, copy) NSURL *mainDocumentURL; //設置網絡服務類型 @property NSURLRequestNetworkServiceType networkServiceType NS_AVAILABLE(10_7, 4_0); //設置是否容許使用服務商蜂窩網 @property BOOL allowsCellularAccess NS_AVAILABLE(10_8, 6_0);
一下屬性的設置必須使用NSMutableURLRequest類,若是是NSURLRequest,則只能夠讀,不能夠修改。框架
//設置HPPT請求方式 默認爲「GET」 @property (copy) NSString *HTTPMethod; //經過字典設置HTTP請求頭的鍵值數據 @property (nullable, copy) NSDictionary<NSString *, NSString *> *allHTTPHeaderFields; //設置http請求頭中的字段值 - (void)setValue:(nullable NSString *)value forHTTPHeaderField:(NSString *)field; //向http請求頭中添加一個字段 - (void)addValue:(NSString *)value forHTTPHeaderField:(NSString *)field; //設置http請求體 用於POST請求 @property (nullable, copy) NSData *HTTPBody; //設置http請求體的輸入流 @property (nullable, retain) NSInputStream *HTTPBodyStream; //設置發送請求時是否發送cookie數據 @property BOOL HTTPShouldHandleCookies; //設置請求時是否按順序收發 默認禁用 在某些服務器中設爲YES能夠提升網絡性能 @property BOOL HTTPShouldUsePipelining;
專一技術,熱愛生活,交流技術,也作朋友。ide
——琿少 QQ羣:203317592性能