热门标签 | 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];}
}






推荐阅读
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 本文介绍了在CentOS 6.4系统中更新源地址的方法,包括备份现有源文件、下载163源、修改文件名、更新列表和系统,并提供了相应的命令。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文介绍了使用Spark实现低配版高斯朴素贝叶斯模型的原因和原理。随着数据量的增大,单机上运行高斯朴素贝叶斯模型会变得很慢,因此考虑使用Spark来加速运行。然而,Spark的MLlib并没有实现高斯朴素贝叶斯模型,因此需要自己动手实现。文章还介绍了朴素贝叶斯的原理和公式,并对具有多个特征和类别的模型进行了讨论。最后,作者总结了实现低配版高斯朴素贝叶斯模型的步骤。 ... [详细]
  • 本文介绍了在Ubuntu下制作deb安装包及离线安装包的方法,通过备份/var/cache/apt/archives文件夹中的安装包,并建立包列表及依赖信息文件,添加本地源,更新源列表,可以在没有网络的情况下更新系统。同时提供了命令示例和资源下载链接。 ... [详细]
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社区 版权所有