一、創建一個Session,並且對其進行初始化 包含三種創建方式: 1、+ (NSURLSession *)sharedSession 單例模式 2、+ (NSURLSession *)sessionWithConfiguration:(NSURLSessionConfiguration *)con ...
一、創建一個Session,並且對其進行初始化
包含三種創建方式:
1、+ (NSURLSession *)sharedSession 單例模式 2、+ (NSURLSession *)sessionWithConfiguration:(NSURLSessionConfiguration *)configuration 這是常規的方式 3、+ (NSURLSession *)sessionWithConfiguration:(NSURLSessionConfiguration *)configuration delegate:(nullable id <NSURLSessionDelegate>)delegate delegateQueue:(nullable NSOperationQueue *)queue 這是常用的方式 配置方式是也是有三種: 1、+ (NSURLSessionConfiguration *)defaultSessionConfiguration 常規的配置 2、+ (NSURLSessionConfiguration *)ephemeralSessionConfiguration 臨時配置 3、+ (NSURLSessionConfiguration *)backgroundSessionConfigurationWithIdentifier: 運行在後臺的配置 註意:設置Configuration的值不會改變當前Session方式,只有當你重新初始化一個Session的時候生效NSURLSessionConfiguration *myconfiguration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:@"backgroundsession"]; //請求的緩存策略 myconfiguration.requestCachePolicy = NSURLRequestUseProtocolCachePolicy; //數據傳輸超時,當恢復傳輸時會清零 myconfiguration.timeoutIntervalForRequest = 5; //單條請求超時,決定一條請求的最長生命周期 myconfiguration.timeoutIntervalForResource = 5; //請求的服務類型 myconfiguration.networkServiceType = NSURLNetworkServiceTypeDefault; //是否允許使用移動網路(電話網路)default is YES myconfiguration.allowsCellularAccess = YES; //後臺模式生效,YES允許自適應系統性能調節 myconfiguration.discretionary = YES; self.testSession = [NSURLSession sessionWithConfiguration:myconfiguration delegate:self delegateQueue:[NSOperationQueue currentQueue]];
二、實現代理(Session-Level)
選用第三種初始化方式創建的Session會有三個Session級別的代理供大家使用
//session關閉回調 -(void)URLSession:(NSURLSession *)session didBecomeInvalidWithError:(NSError *)error { NSLog(@"%s,%@",__func__,error); } //證書安全問題 -(void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, NSURLCredential * _Nullable))completionHandler { } //後臺網路任務完成 // 將回調 :-application:handleEventsForBackgroundURLSession:completionHandler: -(void)URLSessionDidFinishEventsForBackgroundURLSession:(NSURLSession *)session { }