URLSession慢慢整理

NSURLSessionConfiguration

三種工作模式:

  1. 默認會話模式(default):工作模式類似於原來的NSURLConnection,使用的是基於磁盤緩存的持久化策略,使用用戶keychain中保存的證書進行認證授權。

  2. 瞬時會話模式(ephemeral):該模式不使用磁盤保存任何數據。所有和會話相關的caches,證書,cookies等都被保存在RAM中,因此當程序使會話無效,這些緩存的數據就會被自動清空。

  3. 後臺會話模式(background):該模式在後臺完成上傳和下載,在創建Configuration對象的時候需要提供一個NSString類型的ID用於標識完成工作的後臺會話。

+ (NSURLSessionConfiguration *)defaultSessionConfiguration;
+ (NSURLSessionConfiguration *)ephemeralSessionConfiguration;
+ (NSURLSessionConfiguration *)backgroundSessionConfigurationWithIdentifier:(NSString *)identifier;

在backgroundSessionConfiguration:方法中的identifier參數指定了會話的ID,用於標記後臺的session。

@property BOOL allowsCellularAccess;
@property (getter=isDiscretionary) BOOL discretionary;

allowsCellularAccess屬性指定是否允許使用蜂窩連接,discretionary屬性爲YES時表示當程序在後臺運作時由系統自己選擇最佳的網絡連接配置,該屬性可以節省通過蜂窩連接的帶寬。在使用後臺傳輸數據的時候,建議使用discretionary屬性,而不是allowsCellularAccess屬性,因爲它會把WiFi和電源可用性考慮在內。
補充:這個標誌允許系統爲分配任務進行性能優化。這意味着只有當設備有足夠電量時,設備才通過Wifi進行數據傳輸。如果電量低,或者只僅有一個蜂窩連接,傳輸任務是不會運行的。後臺傳輸總是在discretionary模式下運行。

NSURLSession

獲取NSURLSession類對象:

  1. 使用靜態的sharedSession方法,該類使用共享的會話,該會話使用全局的Cache,Cookie和證書。

  2. 通過sessionWithConfiguration:方法創建對象,也就是創建對應配置的會話,與NSURLSessionConfiguration合作使用。

  3. 通過sessionWithConfiguration:delegate:delegateQueue方法創建對象,後兩種方式可以創建一個新會話並定製其會話類型。
    該方式中指定了session的委託和委託所處的隊列。當不再需要連接時,可以調用Session的invalidateAndCancel直接關閉,或者調用finishTasksAndInvalidate等待當前Task結束後關閉。這時Delegate會收到URLSession:didBecomeInvalidWithError:這個事件。Delegate收到這個事件之後會被解引用。

+ (NSURLSession *)sharedSession;
+ (NSURLSession *)sessionWithConfiguration:(NSURLSessionConfiguration *)configuration;
+ (NSURLSession *)sessionWithConfiguration:(NSURLSessionConfiguration *)configuration delegate:(nullable id <NSURLSessionDelegate>)delegate delegateQueue:(nullable NSOperationQueue *)queue;

NSURLSessionTask

NSURLSessionTask是一個抽象子類,它有三個子類:NSURLSessionDataTask,NSURLSessionUploadTask和NSURLSessionDownloadTask。
這三個類封裝了現代應用程序的三個基本網絡任務:獲取數據,比如JSON或XML,以及上傳和下載文件。

繼承關係

注意:ios9新出類 NSURLSessionStreamTask

創建對象很特殊,在NSURLSession中

/*NSURLSessionDataTask/
- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request;
- (NSURLSessionDataTask *)dataTaskWithURL:(NSURL *)url;
/*帶有結束block/
- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request completionHandler:(void (^)())completionHandler;
- (NSURLSessionDataTask *)dataTaskWithURL:(NSURL *)url completionHandler:(void (^)())completionHandler;


/*NSURLSessionUploadTask/
- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request fromFile:(NSURL *)fileURL;
- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request fromData:(NSData *)bodyData;
- (NSURLSessionUploadTask *)uploadTaskWithStreamedRequest:(NSURLRequest *)request;
/*帶有結束block/
- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request fromFile:(NSURL *)fileURL completionHandler:(void (^)())completionHandler;
- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request fromData:(nullable NSData *)bodyData completionHandler:(void (^)())completionHandler;
- 

/*NSURLSessionDownloadTask/
- (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request;
- (NSURLSessionDownloadTask *)downloadTaskWithURL:(NSURL *)url;
- (NSURLSessionDownloadTask *)downloadTaskWithResumeData:(NSData *)resumeData;
/*帶有結束block/
- (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request completionHandler:(void (^)())completionHandler;
- (NSURLSessionDownloadTask *)downloadTaskWithURL:(NSURL *)url completionHandler:(void (^)())completionHandler;
- (NSURLSessionDownloadTask *)downloadTaskWithResumeData:(NSData *)resumeData completionHandler:(void (^)())completionHandler;

URLSession簡單使用詳細介紹:http://www.jianshu.com/p/04050398c602
後臺下載詳細介紹:http://www.cocoachina.com/industry/20131106/7304.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章