压缩包线程下载,下载完成后消息中心获取信息,然后解压到指定目录

本文介绍了一个iOS应用内的更新机制实现方案,包括后台下载更新包、使用多线程处理下载任务、解压更新包并监听更新进度等功能。通过NSNotification进行线程间通信,并利用ZipArchive类库实现文件解压。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引用libz.dylib和第三方类库:《ZipHelper》

 

- (void)viewDidLoad

{

    [super viewDidLoad];

    //注册消息

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

    //开新的线程

    NSThread *thread=[[NSThread alloc] initWithTarget:self selector:@selector(threadUpdatePre) object:nil];

    [thread start];

    [thread release];

}

//取沙盒目录

-(NSString *) getAppStartupPath

{

   return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)objectAtIndex:0];

}


//调用线程事件

-(void)threadUpdatePre

{

    //如果主线程中有自动回收池,线程如果要用自动回收池需另开线程池

   NSAutoreleasePool *pool=[[NSAutoreleasePoolalloc] init];

   //指定下载地址

   NSString *urlString=[[[NSStringalloc]initWithFormat:@"http://...../test.zip"]autorelease];

    NSURL    *url = [NSURL URLWithString:urlString];

    NSURLRequest *request = [NSURLRequest requestWithURL:url];

   NSData   *data = [NSURLConnectionsendSynchronousRequest:request returningResponse:nilerror:nil];

    

    NSString *filePath=[[[NSString alloc]initWithFormat:@"%@", [selfgetAppStartupPath]] autorelease];

    [datawriteToFile:[filePath stringByAppendingString:@"/test.zip"]atomically:YES];

    //向消息中心发送完成消息

    [[NSNotificationCenterdefaultCenter] postNotificationName:@"back"object:self];

    [pool drain];

}


//接收消息中心消息,回调相应事件

- (void)callBack{

    [selfZipToFile];

}

//解压缩

-(void)ZipToFile{

    NSString *filePath=[[NSString alloc]initWithFormat:@"%@", [selfgetAppStartupPath]];

   ZipArchive *zp=[[ZipArchivealloc]init];

    BOOL isUpdateSucess=YES;

    if ([zp UnzipOpenFile:[filePath stringByAppendingString:@"/test.zip"] Password:@"123456"]) {//带密码解压

        isUpdateSucess = isUpdateSucess && [zpUnzipFileTo:filePathoverWrite:YES];

        [zp UnzipCloseFile];

    }elseif([zpUnzipOpenFile:[filePathstringByAppendingString:@"/test.zip"]]){//不带密码解压

        isUpdateSucess = isUpdateSucess && [zpUnzipFileTo:filePathoverWrite:YES];

        [zp UnzipCloseFile];

    }

    else{

        isUpdateSucess=NO;

    }

    [zp release];

    [filePath release];

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值