iOS中的URLSession

 URLSession   

 NSURLSession是iOS7中新的網絡接口,與NSURLConnection是並列的.
緩存

    當程序在前臺時,NSURLSession和NSURLConnection大部分能夠互相替代.NSURLSession支持後臺網絡操做,除非用戶強行關閉.服務器

NSURLSession提供的功能:cookie

    1> 經過URL將數據下載到內存;   
網絡

    2> 經過URL將數據下載到文件系統;
session

    3> 將數據上傳到指定的URL;
異步

    4> 在後臺完成上述功能.
編碼

    5> 支持下載,斷點續傳,後臺上傳/下載,後臺上傳/下載任務跟進
url

對於小型數據,如用戶登陸,下載小圖像,JSON&XML仍然使用NSURLConnection的異步或同步方法便可.
spa

NSURLSession的使用:線程

    使用NSURLSessionConfiguration來配置NSURLSession對象 

    用NSURLSession對象來啓動一個NSURLSessionTask對象 

    也可使用系統全局的sharedSession單例來知足大多數的需求 

注意:

    相比較NSURLConnection的返回處理,NSURLSession提供了靈活的數據返回方式,可使用簡單的block方式來處理返回數據,也可使用更強大的delegate.

NSURLSessionConfiguration

    用於定義和配置NSURLSession對象;

    每個NSURLSession對象均可以設置不一樣的NSURLSessionConfiguration,從而知足應用內不一樣類型的網絡請求.

NSURLSessionConfiguration的三種類型: 

    1> defaultSessionConfiguration: 默認的session配置, 相似NSURLConnection的標準配置, 使用硬盤來存儲緩存數據.     

    2> ephemeralSessionConfiguration: 臨時的session配置, 與默認配置相比, 這個配置不會將緩存、cookie等存在本地,只會存在內存裏,因此當程序退出時,全部的數據都會消失

    3> backgroundSessionConfiguration: 後臺session配置, 與默認配置相似, 不一樣的是會在後臺開啓另外一個線程來處理網絡數據.

NSURLSessionTask

    NSURLSession使用NSURLSessionTask來具體執行網絡請求的任務.

    NSURLSessionTask支持網絡請求的取消、暫停和恢復,好比下載文件暫停以後再恢復就可以自動從上次的進度繼續下載 .

    NSURLSessionTask還能獲取數據的讀取進度 .

    NSURLSessionTask的三種類型:

    1> NSURLSessionDataTask 處理通常的NSData數據對象, 好比經過GET或POST方式從服務器獲取JSON或XML返回等等, 但不支持後臺獲取.

    2> NSURLSessionUploadTask 用於上傳文件, 支持後臺上傳 .

    3> NSURLSessionDownloadTask 用於下載文件, 支持後臺下載 .

經過HTTP PUT方法實現文件上傳的步驟

    實例化NSMutableURLRequest並指定HTTPMethod爲PUT .

    設置請求的受權 :

    1> 受權字符串格式:用戶名:口令 .

    2> 受權模式:Basic base64編碼的受權字符串 .

    3> 爲HTTPHeaderField的Authorization賦值 .

文件上傳的請求部分

// 1. URLRequest
NSURL *url = [NSURL URLWithString:@"http://localhost/uploads/xxx.png"];
NSMutableURLRequest *requestM = [NSMutableURLRequest requestWithURL:url cachePolicy:0 timeoutInterval:2.0f];
requestM.HTTPMethod = @"PUT";
// 設置用戶受權
// 1> 受權字符串(用戶名+密碼)
NSString *authStr = @"admin:123456";
// 2> BASE 64編碼
NSData *authData = [authStr dataUsingEncoding:NSUTF8StringEncoding];
NSString *base64Str = [authData base64EncodedStringWithOptions:0];
NSString *auth = [NSString stringWithFormat:@"BASIC %@", base64Str];
[requestM setValue:auth forHTTPHeaderField:@"Authorization"];
相關文章
相關標籤/搜索