我们先看下,本文的主题大纲

我们通过大纲可以看到,我们在此文中,可以了解到的知识点有以下
1.加载网络图片,通常会加载网络图片,这里我们介绍mac自带的Apache服务器,之后来自服务器的图片。
2.加载内存里的图片,通常我们指的内存是ios应用下的沙盒。
3.加载本地的图片,加载方式
3.1 [NSBundle mainBundle]
3.2 imageNamed
1.加载网络图片
//NSData是用来包装数据的。NSData存储的是二进制数据,屏蔽了数据之间的差异,文本、音频、图像等数据都可用NSData来存储
NSData *imgData = [NSData dataWithContentsOfURL:[NSURL URLWithString:url]];
UIImage *image = [UIImage imageWithData:imgData];// 拿到image
通常mac系统都集成了Apache服务器这里就不再补充了,我们来看下关于启动和关闭的操作。
1.打开关闭
//开启apache:
sudo apachectl start
//重启apache:
sudo apachectl restart
//关闭apache:
sudo apachectl stop
打开之后,我们输入网址http://127.0.0.1
访问如下

其实默认打开的就是index.html.en(一个网络文件)
2.查找服务器路径
在Finder目录下,前往下面的路径
/Library/WebServer/Documents
查看如下

这里我在服务器里放了几张图片
我们打开浏览器输入http://127.0.0.1/1.jpg
访问如下,我们可以在浏览器中查看到自己的图片

3.在同一局域网的设备需要访问,可以将IP(127.0.0.1)也可以换成你电脑的IP地址。
注意事项
使用之后,记得关闭服务器,不然会一直消耗内存。
2.加载沙盒图片
拿到沙盒下Document路径
-(NSString * )getPath
{
return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
}
加载图片
NSString * path = [[self getPath] stringByAppendingString:@"/1.jpg”];// 准备一张照片放进沙盒里
NSData * imgData =[NSData dataWithContentsOfFile:path];
UIImage * image = [[UIImage alloc]initWithContentsOfFile:path];
接下来,我们看下一张经典的关于沙盒的图片

沙盒机制
iOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文本文件等。
1、每个应用程序都有自己的存储空间
2、应用程序不能翻过自己的围墙去访问别的存储空间的内容
3、应用程序请求的数据都要通过权限检测,假如不符合条件的话,不会被放行。
默认情况下,每个沙盒含有3个文件夹:Documents, Library 和 tmp。因为应用的沙盒机制,应用只能在几个目录下读写文件
Documents:苹果建议将程序中建立的或在程序中浏览到的文件数据保存在该目录下,iTunes备份和恢复的时候会包括此目录
Library:存储程序的默认设置或其它状态信息;
Library/Caches:存放缓存文件,iTunes不会备份此目录,此目录下文件不会在应用退出删除
tmp:提供一个即时创建临时文件的地方。

查看对应的文件夹路径
NSString * docpath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; //Documents目录
NSString * libpath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject]; //Library目录
NSString * tmp = NSTemporaryDirectory();//tmp目录
关于沙盒,我们先简单介绍到这里。
3.加载项目中的图片
UIImage * image = [UIImage imageNamed:@"1.jpg"]; // 直接加载
这种方法占内存,当然这种方式也是有好处的,下次加载时由于已经在内存中,所以速度很快。
NSString * imagePath = [[NSBundle mainBundle] pathForResource:@"1" ofType:@"jpg"];
UIImage * image = [UIImage imageWithContentsOfFile:imagePath];// NSBundle加载
内存变化不是很明显。这种方式每次都需要重新加载,速度自然没有第一种方式快。
[end]
关于图片加载的三种方式,简单介绍到这里。
网友评论