iPhone中沙盒的作用以及存取沙盒中的文件(图片)

转自:http://blog.sina.com.cn/s/blog_725cab6d0100srdt.html


【沙盒机制】:iPhone应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文本文件等。

【iphone的沙盒理解】:ios的ipa安装文件就如同一个个盒子一般,放在了/user/applications目录下,以这个程序(比如goodreader)的眼光看外面的世界,他基本什么也看不到,因为他的权限如此之小,以至于他看不到在goodreader的目录外,世界上还有什么?这也就是打开goodreader后不能打开其他程序内的文档的原因。ios的ipa可以随便乱装而不用担心会像windows一样产生很多垃圾文件,因为几乎一个程序所有的东西都放在/user/applications中,少部分在/applications中,有的程序可能获得了ios的官方支持,有了一些更大的权限(绝不会太大,比如官方ipa的qq即使登峰造极,他也不会像symbian系统一样,在桌面搞出个qq的信息小头像),会在其他位置生成一些文件(可能性很小),为了进一步防止恶意ipa程序通过非法途径破坏其他程序,ios进一步为每个文件夹起了一个随机名字,采用uuid方式,就是你现在看到的很长一串数字字母的目录名,这样防止了其他程序猜测其他程序的位置。
【沙盒文件夹的路径】:/Users/“用户名”/Library/Application Support/iPhoneSimulator/User/Applications/2CADA5C1-6B9F-44E9-8F06-6C992E3E99C6/Documents/2CADA5C1-6B9F-44E9-8F06-6C992E3E99C6是你的应用程序随机生成的编码,每个应用程序文件夹的名字都不一样

------------------------------------------------------------------------------------------------------------------------------------------

     所以了解了沙盒机制后,我们研究一下怎么写入一个文件(比如图像文件)到沙盒中保存下来,以及iPhone应用程序如何读这个文件。

 

    经常遇到要从网上下载图片并保存到Iphone本地,从国外网站上找了一个Demo,与国人分享一下。

参数说明:
NSData 
toretrieve the image from the URL
NSDocumentDirectory 
tofind Document folder’s Path
UIImagePNGRepresentation 
tosave it as PNG
UIImageJPEGRepresentation 
tosave it as JPEG

代码说话:

NSLog(@”Downloading…”);
// Get an image from the URL below
UIImage *image = [[UIImage alloc] initWithData:[NSDatadataWithContentsOfURL:[NSURLURLWithString:@"http://www.objectgraph.com/images/og_logo.png"]]];

 

NSLog(@”%f,%f”,image.size.width,image.size.height);

// Let’s save the file into Document folder. 即一下路径(/Users/“用户名”/Library/ApplicationSupport/iPhoneSimulator/User/Applications/2CADA5C1-6B9F-44E9-8F06-6C992E3E99C6/Documents/2CADA5C1-6B9F-44E9-8F06-6C992E3E99C6/Document)

NSString *docDir =[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES) objectAtIndex:0];

// If you go to the folder below, you will find thosepictures
NSLog(@”%@”,docDir);

// 以png图片类型存储数据到Document文件夹下

NSLog(@”saving png”);
NSString *pngFilePath = [NSStringstringWithFormat:@"%@/test.png",docDir];
NSData *data1 = [NSDatadataWithData:UIImagePNGRepresentation
(image)];
[data1 writeToFile:pngFilePath atomically:YES];

NSLog(@”saving jpeg”);
NSString *jpegFilePath = [NSStringstringWithFormat:@"%@/test.jpeg",docDir];
NSData *data2 = [NSDatadataWithData:UIImageJPEGRepresentatio
n(image, 1.0f)];//1.0f = 100%quality
[data2 writeToFile:jpegFilePath atomically:YES];

NSLog(@”saving image done”);

[image release];

--------------------------------------------------------------------------------------------------

存放完了,那我们要去读取这些文件

//拿到应用程序沙盒里面的路径
 
   NSArray*paths =[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES) objectAtIndex:0];
//读取存在沙盒里面的文件图片
 
   NSString*imgPath=[[paths objectAtIndex:0]stringByAppendingPathComponent:@"bgimage.png"];
//因为拿到的是个路径 把它加载成一个data对象
 
   NSData*data=[NSDatadataWithContentsOfFile:imgPath];    
 
   //直接把该图片读出来
 
   UIImage*img=[UIImage imageWithData:data];   


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值