<强>方案一:>强利用NSURLConnection和它的代理方法,及NSFileHandle (iOS9后不建议使用)
相关变量:
@ property(原子、强)NSFileHandle * writeHandle; @ property(原子,分配)很久totalLength;>之前1的在发送请求
//创建一个请求 NSURL * url=[NSURL URLWithString: @ "); NSURLRequest *请求=[NSURLRequest requestWithURL: url];//使用NSURLConnection发起一个异步请求 (NSURLConnection connectionWithRequest:请求委托:自我); >之前2祝辞;在代理方法中处理服务器返回的数据
/* *在接收到服务器的响应时调用下面这个代理方法 1 .创建一个空文件 2 .用一个句柄对象关联这个空文件,目的是方便在空文件后面写入数据 */- (void)连接:(NSURLConnection *)连接didReceiveResponse: (null NSURLResponse *)反应 {//创建文件路径 NSString *缓存=[NSSearchPathForDirectoriesInDomains (NSCachesDirectory, NSUserDomainMask,是的)lastObject]; NSString * filePath=[缓存stringByAppendingPathComponent: @“videos.zip”);//创建一个空的文件到沙盒中 NSFileManager * mgr_home_dir_t=[NSFileManager defaultManager]; [下createFileAtPath: filePath内容:nil属性:nil);//创建一个用来写数据的文件句柄 自我。writeHandle=[NSFileHandle fileHandleForWritingAtPath filePath):;//获得文件的总大小 自我。totalLength=response.expectedContentLength; }/* *在接收到服务器返回的文件数据时调用下面这个代理方法 利用句柄对象往文件的最后面追加数据 */- (void)连接:连接(NSURLConnection *) didReceiveData: (null NSData *)数据 {//移动到文件的最后面 (自我。writeHandle seekToEndOfFile];//将数据写入沙盒 (自我。writeHandle writeData:数据); }/* * 在所有数据接收完毕时,关闭句柄对象 */- (void) connectionDidFinishLoading: (NSURLConnection *)连接 {//关闭文件并清空 (自我。writeHandle closeFile]; 自我。writeHandle=零; } >之前<强>方案二:强>使用NSURLSession的NSURLSessionDownloadTask和NSFileManager
NSURLSession *会话=[NSURLSession sharedSession]; NSURL * url=[NSURL URLWithString: @ ");//可以用来下载大文件,数据将会存在沙盒里的tmp文件夹 NSURLSessionDownloadTask *任务=[会话downloadTaskWithURL: url completionHandler: ^ (NSURL * _Nullable位置,NSURLResponse * _Nullable响应,NSError * _Nullable错误){//位置:临时文件存放的路径(下载好的文件)//创建存储文件路径 NSString *缓存=[NSSearchPathForDirectoriesInDomains (NSCachesDirectory, NSUserDomainMask,是的)lastObject];//response.suggestedFilename:建议使用的文件名,一般跟服务器端的文件名一致 NSString *文件=[缓存stringByAppendingPathComponent response.suggestedFilename):;/* *将临时文件剪切或者复制到缓存文件夹 AtPath:剪切前的文件路径 toPath:剪切后的文件路径 */NSFileManager * mgr_home_dir_t=[NSFileManager defaultManager]; 【下moveItemAtPath:位置。路径toPath:文件错误:nil); }); (任务的简历);>之前<强>方案三:强>使用NSURLSessionDownloadDelegate的代理方法和NSFileManger
- (void) touchesBegan:(NSSetiOS开发——实现大文件下载与断点下载思路