SignWingS

导航

NSURLSession的使用(1)

一、创建一个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
{
    
}

 

posted on 2016-08-17 17:39  SignWingS  阅读(290)  评论(0)    收藏  举报