使用NSURLSession实现下载类的封装

 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 = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]];

    //执行下载

    self.downloadTask = [session downloadTaskWithURL:[NSURL URLWithString:url]];

    //开始下载,或继续下载,对应suspend(暂停)

    [self.downloadTask resume];

    

}


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 = [[caches stringByAppendingPathComponent:self.fileName] stringByAppendingString:@".mp3"];

    //创建文件管理工具类

    NSFileManager *maneager = [NSFileManager defaultManager];

    //将文件转存至我们设定的路径下

    [maneager moveItemAtPath:location.path toPath:fileName error:nil];

    self.fileUrl = fileName;

    //下载完毕后安全处理将downloadTask置为空

    self.downloadTask = nil;

    [[NSNotificationCenter defaultCenter] postNotificationName:@"download" object:nil];


}

3.该下载类的使用方法


a.外部调用时,用以下方法调用

 [[DownloadSong shareDownload] downloadWithUrl:文件地址 fileName:文件名];

b.添加一个通知用来接收下载完成方法,以便于我们在外部使用,如:下载完毕后使用,某一个页面使用存储信息,存入数据库等等

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(downloadOK) name:@"download" object:nil];

 









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值