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

相关文章

这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

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

常用的jdk下载地址

jdk下载地址 安装方式可以看之前的博客: mac安装jdk oracle 版本:https://www.oracle.com/java/technologies/downloads/ Eclipse Temurin版本:https://adoptium.net/zh-CN/temurin/releases/ 阿里版本: github:https://github.com/

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta