【沙盒机制】: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:UIImageJPEGRepresentation(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];