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是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

基于Python开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注

Java中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例解析

《Java中的分布式系统开发基于Zookeeper与Dubbo的应用案例解析》本文将通过实际案例,带你走进基于Zookeeper与Dubbo的分布式系统开发,本文通过实例代码给大家介绍的非常详... 目录Java 中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例一、分布式系统中的挑战二

Python实现简单封装网络请求的示例详解

《Python实现简单封装网络请求的示例详解》这篇文章主要为大家详细介绍了Python实现简单封装网络请求的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录安装依赖核心功能说明1. 类与方法概览2.NetHelper类初始化参数3.ApiResponse类属性与方法使用实

基于Go语言开发一个 IP 归属地查询接口工具

《基于Go语言开发一个IP归属地查询接口工具》在日常开发中,IP地址归属地查询是一个常见需求,本文将带大家使用Go语言快速开发一个IP归属地查询接口服务,有需要的小伙伴可以了解下... 目录功能目标技术栈项目结构核心代码(main.go)使用方法扩展功能总结在日常开发中,IP 地址归属地查询是一个常见需求:

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

Debian 13升级后网络转发等功能异常怎么办? 并非错误而是管理机制变更

《Debian13升级后网络转发等功能异常怎么办?并非错误而是管理机制变更》很多朋友反馈,更新到Debian13后网络转发等功能异常,这并非BUG而是Debian13Trixie调整... 日前 Debian 13 Trixie 发布后已经有众多网友升级到新版本,只不过升级后发现某些功能存在异常,例如网络转

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模