iOS网络(NSURLSession)

2016-11-18  本文已影响71人  天外丶飞仙

很多iOS开发者使用AFNetWorking完成全部的网络请求,对其中封装的NSURLSession了解很少。这里对NSURLSession做一个介绍。

NSURLSession结构

NSURLSession层次结构.png Task结构图.png

NSURLSession简单使用

NSURLSession下载

NSURL * url = [NSURL URLWithString:@"http://192.168.31.180/sszip.zip"];
[[[NSURLSession sharedSession] downloadTaskWithURL:url completionHandler:^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) 
        NSLog(@"%@",location);
        //这里面放的是下载的目录
}] resume];

这里有个知识点:如果在回调方法中,不做任何处理,下载的文件会被删除,下载文件放在temp里面的,系统会自动回收这块区域。
苹果这样设计的目的是:

NSURLSession代理

当下载网络数据是需要显示网络下载进度,就需要使用代理了。

NSURLSession注意点

Session 会对代理进行强引用,当使用了代理,如果任务执行结束后,不取消Session,会出现内存泄露!

//1. 下载完成方法
-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location{
    NSLog(@"完成 %@",location);
    //完成任务,
    [self.session finishTasksAndInvalidate];
    //清空Session
    self.session = nil;
}
上一篇下一篇

猜你喜欢

热点阅读