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

相关文章

Android开发环境配置避坑指南

《Android开发环境配置避坑指南》本文主要介绍了Android开发环境配置过程中遇到的问题及解决方案,包括VPN注意事项、工具版本统一、Gerrit邮箱配置、Git拉取和提交代码、MergevsR... 目录网络环境:VPN 注意事项工具版本统一:android Studio & JDKGerrit的邮

Python开发文字版随机事件游戏的项目实例

《Python开发文字版随机事件游戏的项目实例》随机事件游戏是一种通过生成不可预测的事件来增强游戏体验的类型,在这篇博文中,我们将使用Python开发一款文字版随机事件游戏,通过这个项目,读者不仅能够... 目录项目概述2.1 游戏概念2.2 游戏特色2.3 目标玩家群体技术选择与环境准备3.1 开发环境3

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t

前端下载文件时如何后端返回的文件流一些常见方法

《前端下载文件时如何后端返回的文件流一些常见方法》:本文主要介绍前端下载文件时如何后端返回的文件流一些常见方法,包括使用Blob和URL.createObjectURL创建下载链接,以及处理带有C... 目录1. 使用 Blob 和 URL.createObjectURL 创建下载链接例子:使用 Blob

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经