使用NSURLSession实现下载类的封装
来源:互联网 发布:苏联数学 知乎 编辑:程序博客网 时间:2024/05/17 09:23
1. 首先明确我们要一个单例类来写下载功能,这里使用NSURLSessionDownloadTask这个下载类实现下载
a.使用NSURLSessionDownloadTask需要使用其父类NSURLSession来支持与初始化
b.父类初始化方法中sessionWithConfiguration的参数可以填nil,也可以给[NSURLSessionConfiguration defaultSessionConfiguration]来给默认值(方法)
c.delegate给自身类去操作遵循过代理之后执行下载完毕转存文件的操作
遵从协议<NSURLSessionDownloadDelegate>d.delegateQueue给主线程并不代表是放在主线程去执行下载,而是开辟线程执行下载,下载完毕后回到主线程去刷新
e.用NSURLSessionDownloadTask创建的对象根据传入的url执行下载与暂停功能
@interface DownloadSong :NSObject<NSURLSessionDownloadDelegate>
//下载类
@property (nonatomic,strong) NSURLSessionDownloadTask *downloadTask;
- (void)downloadWithUrl:(NSString *)url fileName:(NSString *)fileName
{
self.fileName = fileName;
NSURLSession *session = [NSURLSessionsessionWithConfiguration:[NSURLSessionConfigurationdefaultSessionConfiguration] delegate:selfdelegateQueue:[NSOperationQueuemainQueue]];
//执行下载
self.downloadTask = [sessiondownloadTaskWithURL:[NSURLURLWithString:url]];
//开始下载,或继续下载,对应suspend(暂停)
[self.downloadTaskresume];
}
2.NSURLSession代理方法的实现
a.代理方法为NSURLSession的代理,下载后走该方法
b.我们内部使用它的时候需要将下载好的文件以.MP3的格式转存值Library/Caches的路径,否则下载完毕之后系统会直接删除
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location
{
//获取缓存路径
NSString *caches=[NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask, YES )lastObject];
NSString *fileName = [[cachesstringByAppendingPathComponent:self.fileName]stringByAppendingString:@".mp3"];
//创建文件管理工具类
NSFileManager *maneager = [NSFileManagerdefaultManager];
//将文件转存至我们设定的路径下
[maneager moveItemAtPath:location.pathtoPath:fileName error:nil];
self.fileUrl = fileName;
//下载完毕后安全处理将downloadTask置为空
self.downloadTask =nil;
[[NSNotificationCenterdefaultCenter] postNotificationName:@"download"object:nil];
}
3.该下载类的使用方法
a.外部调用时,用以下方法调用
[[DownloadSong shareDownload] downloadWithUrl:文件地址 fileName:文件名];
b.添加一个通知用来接收下载完成方法,以便于我们在外部使用,如:下载完毕后使用,某一个页面使用存储信息,存入数据库等等
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(downloadOK) name:@"download" object:nil];
- 使用NSURLSession实现下载类的封装
- NSURLSession无法实现断点续传下载的问题解决
- NSURLSession实现下载(代理)
- NSURLSession实现下载(代理)
- NSURLSession实现断点下载
- NSURLSession实现断点下载
- 使用NSURLSession 实现单个文件的上传
- 使用NSURLSession 实现单个文件的上传
- 利用 NSURLSession 实现文件下载
- iOS - NSURLSession实现断点续传下载
- NSURLSession代理实现一个下载
- NSURLSession实现续点下载
- OC 下载数据 与请求登录 NSURLSession的使用
- NSURLSession实现下载(不能看到下载进度)
- NSURLSession下载的进度监测
- NSURLSession的上传和下载
- 自定义下载的封装实现
- NSURLSession的简单使用
- MySQL 5.7.10 解压版的安装及配置
- TCP通信的基本流程
- 即时涂鸦实现原理
- UIImageView基础详解
- iOS KVC & KVO
- 使用NSURLSession实现下载类的封装
- C++11新特性
- 用Myeclipse运行项目报getClassInstance Line: 209 - com/opensymphony/xwork2/spring/SpringObject错
- 回调函数
- vmdk格式转换 kvm启动
- volatile关键字解析
- Android关闭AlertDialog的方法
- 杜绝假死,Tomcat容器做到自我保护,设置最大连接数
- Linux vmstat命令实战详解