热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ios多线程下载文件代码

.h文件:NSString*FDownLoadDefaultFile;下载异常状态的默认文件NSString*FDownLoadLocalFilePath;下载到本

.h文件:

NSString*FDownLoadDefaultFile; //下载异常状态的默认文件
NSString*FDownLoadLocalFilePath; //下载到本地的保存路径
NSIntegerFDownLoadFileCount; //当前下载的文件总数
NSInteger FDownLoadID; //下载序列IDNSMutableArray*FDownLoadFileArr; //下载到本地的文件
NSMutableArray*FDownLoadNetworkFilePathArr; //需要下载到本地的网络文件路径NSCondition*FDownloadLockCondition; //线程锁//下载文件
//多线程下载文件
-(void)DownloadFileByThread : (NSArray *)AFileArr //需要下载的文件集合数组ADownloadDirPath : (NSString *)ADownloadFilePath //需要下载到本地的目录路径,结尾为“/”
ADownloadDefaultFileURL : (NSString *)ADownloadDeaultFileURL; //如果需要下载的文件不存在,则需要下载的默认文件
//下载主线程
-(void)DownloadMainThread : (NSArray *)ADataArr; //传递到线程中的数据集合,//位置0=本地下载目录
//位置1=下载文件地址//位置2=默认下载文件
//位置3=文件所属的位置索引号


.m文件:

-(void)SetDownloadFileID : (NSInteger)AID {
FDownLoadID= AID;
}-(void)DownloadFileByThread : (NSArray *)AFileArrADownloadDirPath : (NSString *)ADownloadFilePath
ADownloadDefaultFileURL : (NSString *)ADownloadDeaultFileURL {
NSInteger AFileCount = [AFileArr count];
NSString *ALocalFile = ADownloadFilePath;
NSString *AFileName;
NSString *AFileURL;
NSString *ADefaultFile;
NSMutableArray*ADataArr;[[NSURLCachesharedURLCache] removeAllCachedResponses];
FDownLoadNetworkFilePathArr= [[NSMutableArrayalloc] initWithArray:AFileArr];
FDownLoadFileArr = [[NSMutableArray alloc] initWithCapacity:AFileCount];
FDownLoadFileCount= 0;
FDownloadLockCondition= [[NSConditionalloc] init];for (int i = 0; i [FDownLoadFileArraddObject:@""];
}for (int i = 0; i AFileURL = [[NSString alloc] initWithString: [AFileArr objectAtIndex : i]];
AFileName = [ALocalFile stringByAppendingString:[self GetFileName:AFileURL]];ADataArr = [[NSMutableArray alloc] initWithCapacity:3];
[ADataArr addObject:ALocalFile];
if([[NSFileManagerdefaultManager] fileExistsAtPath:AFileName] == NO) {
//NSLog(@"%@",AFileURL);
[ADataArr addObject:AFileURL];
[ADataArr addObject:ADownloadDeaultFileURL];
[ADataArr addObject:[[NSStringalloc] initWithFormat:@"%d",i]];[NSThreaddetachNewThreadSelector:@selector(DownloadMainThread:) toTarget:selfwithObject:ADataArr];
[ADataArr release];
}
else {
//NSLog(@"%@",AFileName);
if (AFileURL == @"") {
ADefaultFile = [ALocalFile stringByAppendingString:[self GetFileName:ADownloadDeaultFileURL]];
if ([[NSFileManager defaultManager] fileExistsAtPath:ADefaultFile] == NO) {
[ADataArr addObject:ADownloadDeaultFileURL];
[ADataArr addObject:ADownloadDeaultFileURL];
[ADataArr addObject:[[NSStringalloc] initWithFormat:@"%d",i]];
[NSThreaddetachNewThreadSelector:@selector(DownloadMainThread:) toTarget:selfwithObject:ADataArr];
[ADataArr release];
}
else {
FDownLoadFileCount++;
[FDownLoadFileArrreplaceObjectAtIndex:i withObject:ADefaultFile];
//[FDownLoadFileArr addObject:ADefaultFile];
}
}
else {
FDownLoadFileCount++;
[FDownLoadFileArrreplaceObjectAtIndex:i withObject:AFileName];
//[FDownLoadFileArr setValue:AFileName forKey:[[NSString alloc] initWithFormat:@"%d",i]];
//[FDownLoadFileArr addObject:AFileName];
}}}
if(FDownLoadFileCount== [FDownLoadNetworkFilePathArrcount]) { //完成全部下载
[self.delegate DownLoadFileDidFinish:FDownLoadFileArr AID : FDownLoadID];
[FDownLoadNetworkFilePathArrrelease];
[FDownLoadFileArrrelease];
[FDownloadLockConditionrelease];}
}-(void)DownloadMainThread : (NSArray *)ADataArr {
NSString *ALocalFile = [ADataArr objectAtIndex:0];
//NSLog(@"%@",[ADataArr objectAtIndex:1]);
NSURL*AURL = [[NSURLalloc] initWithString:[ADataArr objectAtIndex:1]];
NSData *AFileData = [[NSData alloc] initWithContentsOfURL:AURL];
if (AFileData != nil) {
ALocalFile = [ALocalFile stringByAppendingString:[self GetFileName:[ADataArr objectAtIndex:1]]];
//NSLog(@"%@",ALocalFile);
[AFileData writeToFile:ALocalFile atomically:YES];
}
else{ //不存在指定路径的文件,使用默认文件
NSString *ADefaultFile = [ALocalFile stringByAppendingString:[self GetFileName:[ADataArr objectAtIndex:2]]];
if ([[NSFileManager defaultManager] fileExistsAtPath:ADefaultFile] == NO) {
[AURL release];
[AFileData release];
AURL = [[NSURLalloc] initWithString:[ADataArr objectAtIndex:2]];
AFileData = [[NSData alloc] initWithContentsOfURL:AURL];
if (AFileData != nil) {
ALocalFile = [ALocalFile stringByAppendingString:[self GetFileName:[ADataArr objectAtIndex:1]]];
[AFileData writeToFile:ALocalFile atomically:YES];
}
else {
ALocalFile = [DocumentPathstringByAppendingString:@"default.png"];
}}}
//NSLog(@"ADataArr = %@",[ADataArr objectAtIndex:3]);
[FDownloadLockConditionlock]; //上锁
FDownLoadFileCount++;
[FDownLoadFileArrreplaceObjectAtIndex:[[ADataArr objectAtIndex:3] intValue] withObject:ALocalFile];
[FDownloadLockConditionunlock]; //解锁[AURL release];
[ALocalFile release];
[AFileData release];if(FDownLoadFileCount== [FDownLoadNetworkFilePathArrcount]) { //完成全部下载
[self.delegate DownLoadFileDidFinish:FDownLoadFileArr AID : FDownLoadID];
[FDownLoadNetworkFilePathArrrelease];
[FDownLoadFileArrrelease];
[FDownloadLockConditionrelease];}
}






推荐阅读
  • iOS snow animation
    CTSnowAnimationView.hCTMyCtripCreatedbyalexon1614.Copyright©2016年ctrip.Allrightsreserved.# ... [详细]
  • 本文整理了一份基础的嵌入式Linux工程师笔试题,涵盖填空题、编程题和简答题,旨在帮助考生更好地准备考试。 ... [详细]
  • iOS 不定参数 详解 ... [详细]
  • 包含phppdoerrorcode的词条 ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • 最近遇到了一道关于哈夫曼树的编程题目,需要在下午之前完成。题目要求设计一个哈夫曼编码和解码系统,能够反复显示和处理多个项目,直到用户选择退出。希望各位大神能够提供帮助。 ... [详细]
  • java解析json转Map前段时间在做json报文处理的时候,写了一个针对不同格式json转map的处理工具方法,总结记录如下:1、单节点单层级、单节点多层级json转mapim ... [详细]
  • vue引入echarts地图的四种方式
    一、vue中引入echart1、安装echarts:npminstallecharts--save2、在main.js文件中引入echarts实例:  Vue.prototype.$echartsecharts3、在需要用到echart图形的vue文件中引入:   importechartsfrom"echarts";4、如果用到map(地图),还 ... [详细]
  • WPF项目学习.一
    WPF项目搭建版权声明:本文为博主初学经验,未经博主允许不得转载。一、前言记录在学习与制作WPF过程中遇到的解决方案。使用MVVM的优点是数据和视图分离,双向绑定,低耦合,可重用行 ... [详细]
  • 使用HTML和JavaScript实现视频截图功能
    本文介绍了如何利用HTML和JavaScript实现从远程MP4、本地摄像头及本地上传的MP4文件中截取视频帧,并展示了具体的实现步骤和示例代码。 ... [详细]
  • Leetcode学习成长记:天池leetcode基础训练营Task01数组
    前言这是本人第一次参加由Datawhale举办的组队学习活动,这个活动每月一次,之前也一直关注,但未亲身参与过,这次看到活动 ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • 本文介绍了如何使用Flume从Linux文件系统收集日志并存储到HDFS,然后通过MapReduce清洗数据,使用Hive进行数据分析,并最终通过Sqoop将结果导出到MySQL数据库。 ... [详细]
  • 本文详细介绍了Java反射机制的基本概念、获取Class对象的方法、反射的主要功能及其在实际开发中的应用。通过具体示例,帮助读者更好地理解和使用Java反射。 ... [详细]
  • python模块之正则
    re模块可以读懂你写的正则表达式根据你写的表达式去执行任务用re去操作正则正则表达式使用一些规则来检测一些字符串是否符合个人要求,从一段字符串中找到符合要求的内容。在 ... [详细]
author-avatar
储兰兰快乐
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有