iOS开发网络篇—文件下载(一·不合理)

2024-04-09 06:48

本文主要是介绍iOS开发网络篇—文件下载(一·不合理),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


一、小文件下载

如果文件比较小,下载方式会比较多

直接用NSData的+ (id)dataWithContentsOfURL:(NSURL *)url;

利⽤NSURLConnection发送一个HTTP请求去下载

如果是下载图片,还可以利用SDWebImage框架 

二、沙盒

  1.在finder中,系统的一些文件(资源库)是隐藏的,可以通过在终端运行下图的代码,显示隐藏的文件。

显示隐藏系统文件:

defaults write com.apple.finder AppleShowAllFiles YES

2.制作替身,以便查看应用沙盒。

推荐工具,SimPholders,可以用来查看沙盒。

 

三、大文件下载示例

提示:该项目代码,仅为示例,并不合理。

复制代码
 1 //
 2 //  YYViewController.m
 3 //  01-文件的下载(不合理)
 4 //
 5 //  Created by apple on 14-6-30.
 6 //  Copyright (c) 2014年 itcase. All rights reserved.
 7 //
 8 
 9 #import "YYViewController.h"
10 
11 @interface YYViewController ()
12 @property(nonatomic,strong)NSMutableData *fileData;
13 - (IBAction)star;
14 
15 @end
16 
17 @implementation YYViewController
18 
19 - (void)viewDidLoad
20 {
21     [super viewDidLoad];
22 }
23 
24 - (IBAction)star {
25     //创建下载路径
26     
27     NSURL *url=[NSURL URLWithString:@"http://192.168.1.53:8080/MJServer/resources/videosres.zip"];
28     
29     //创建一个请求
30     NSURLRequest *request=[NSURLRequest requestWithURL:url];
31     
32     //发送请求(使用代理的方式)
33     NSURLConnection *connt=[NSURLConnection connectionWithRequest:request delegate:self];
34     [connt start];
35 }
36 
37 #pragma mark- NSURLConnectionDataDelegate代理方法
38 /*
39  *当接收到服务器的响应(连通了服务器)时会调用
40  */
41 -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
42 {
43     //初始化data
44     self.fileData=[NSMutableData data];
45 }
46 
47 /*
48  *当接收到服务器的数据时会调用(可能会被调用多次,每次只传递部分数据)
49  */
50 -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
51 {
52     //一点一点接收数据。
53     NSLog(@"接收到服务器的数据!---%d",data.length);
54     [self.fileData appendData:data];
55 }
56 
57 /*
58  *当服务器的数据加载完毕时就会调用
59  */
60 -(void)connectionDidFinishLoading:(NSURLConnection *)connection
61 {
62     // 下载完毕
63     // 大文件不放Documents, 可以放Library\Caches或者tmp
64 //    NSString *fullpath=[caches stringByAppendingString:@"video.zip"];
65     
66     NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
67     NSString *filepath = [caches stringByAppendingPathComponent:@"video.zip"];
68     [self.fileData writeToFile:filepath atomically:YES];
69     
70     NSLog(@"下载完毕");
71 }
72 /*
73  *请求错误(失败)的时候调用(请求超时\断网\没有网\,一般指客户端错误)
74  */
75 -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
76 {
77 }
78 
79 @end
复制代码

模拟器:

点击屏幕上得点击下载按钮,下载在本地服务器上的文件。

代码说明:

在处理大文件下载问题上,无论使用同步或者异步的方式下载,都是一次性拿到所有的数据,不可取。所以更合适的是使用代理的方式进行处理。

这个项目中,花了很长的时间在拼接数据上,此外又花费了很长的时间放在了写入系统沙盒上。且会占用大量的内存空间。这种方法是不合理的,更合适的方法应该是一边拼接数据,一边写入硬盘。

这篇关于iOS开发网络篇—文件下载(一·不合理)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/887452

相关文章

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

SSID究竟是什么? WiFi网络名称及工作方式解析

《SSID究竟是什么?WiFi网络名称及工作方式解析》SID可以看作是无线网络的名称,类似于有线网络中的网络名称或者路由器的名称,在无线网络中,设备通过SSID来识别和连接到特定的无线网络... 当提到 Wi-Fi 网络时,就避不开「SSID」这个术语。简单来说,SSID 就是 Wi-Fi 网络的名称。比如

Java实现任务管理器性能网络监控数据的方法详解

《Java实现任务管理器性能网络监控数据的方法详解》在现代操作系统中,任务管理器是一个非常重要的工具,用于监控和管理计算机的运行状态,包括CPU使用率、内存占用等,对于开发者和系统管理员来说,了解这些... 目录引言一、背景知识二、准备工作1. Maven依赖2. Gradle依赖三、代码实现四、代码详解五

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

在 VSCode 中配置 C++ 开发环境的详细教程

《在VSCode中配置C++开发环境的详细教程》本文详细介绍了如何在VisualStudioCode(VSCode)中配置C++开发环境,包括安装必要的工具、配置编译器、设置调试环境等步骤,通... 目录如何在 VSCode 中配置 C++ 开发环境:详细教程1. 什么是 VSCode?2. 安装 VSCo

C#图表开发之Chart详解

《C#图表开发之Chart详解》C#中的Chart控件用于开发图表功能,具有Series和ChartArea两个重要属性,Series属性是SeriesCollection类型,包含多个Series对... 目录OverviChina编程ewSeries类总结OverviewC#中,开发图表功能的控件是Char

鸿蒙开发搭建flutter适配的开发环境

《鸿蒙开发搭建flutter适配的开发环境》文章详细介绍了在Windows系统上如何创建和运行鸿蒙Flutter项目,包括使用flutterdoctor检测环境、创建项目、编译HAP包以及在真机上运... 目录环境搭建创建运行项目打包项目总结环境搭建1.安装 DevEco Studio NEXT IDE

Python开发围棋游戏的实例代码(实现全部功能)

《Python开发围棋游戏的实例代码(实现全部功能)》围棋是一种古老而复杂的策略棋类游戏,起源于中国,已有超过2500年的历史,本文介绍了如何用Python开发一个简单的围棋游戏,实例代码涵盖了游戏的... 目录1. 围棋游戏概述1.1 游戏规则1.2 游戏设计思路2. 环境准备3. 创建棋盘3.1 棋盘类

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template