iOS开发实现下载器的基本功能(1)

2020-01-15 17:00:21刘景俊

第二步。我们获得了数据,如果您在这个方法中打印数据,您就会发现当文件够大(几M就行)时,这个方法会被调用多次,也就是说,分多次获取数据。所以我们在这个方法中拼接数据,同时也要避免数据拼接后造成占用过多内存。我们累加已下载的数据的长度,计算已下载的百分比,并写入数据流中。在计算百分比时,记得转换类型哦,不然结果都是0,除了最后一个是1。


//获取数据
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
//  NSLog(@"did receive:%@",data);
  self.currentFileLength += data.length;
  float progressPercent = (float)self.currentFileLength / self.fileLength;
  NSLog(@"have downloaded: %f", progressPercent);
  [self.fileStream write:data.bytes maxLength:data.length];
}

最后一步。实际上是两个方法,一个是下载完成调用,一个是下载失败调用。有一点需要注意,无论下载成功或失败,都需要把文件输出流关闭。


//断开连接
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
  NSLog(@"连接结束");
  [self.fileStream close];
}

//发生错误
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
  NSLog(@"%@",error);
  [self.fileStream close];
} 

这只是下载功能的基本实现,接下来会添加下载进度条,并对下载操作进行跟多优化(多线程,断点续传等),最后会对下载操作进行封装。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持ASPKU。


注:相关教程知识阅读请移步到IOS开发频道。