//获取当前应用程序沙盒的路径
NSHomeDictionary();
//沙盒:在一定范围内可以随意做任何事情
//iOS的沙盒指的就是应用程序的文件操作文件夹,在文件夹内可以读写任何内容,但是完全不能访问其他应用程序的沙盒文件
//Documents:跟用户相关的一些文件,用户设置的对app的一些偏好设置,用户的一些文本信息,最好不要存储空间比较大的文件比如视频/音频等等
//Documents 目录:您应该将所有de应用程序数据文件写入到这个目录下。这个目录用于存储用户数据或其它应该定期备份的信息。
AppName.app 目录:这是应用程序的程序包目录,包含应用程序的本身。由于应用程序必须经过签名,所以您在运行时不能对这个目录中的内容进行修改,否则可能会使应用程序无法启动。
Phone应用程序在运行之前,都必须经过iOS的签名验证。所谓签名验证,是iOS保证应用程序不会损坏、不被修改的一种手段。同时,程序中的签名也包含了开发者信息,这可以追踪程序的来源,并在一定程度上保证程序的质量。
如果一个iDevice没有越狱,那么它只能安装app store上的程序,这就是通过签名机制来保证的。相反,一个经过越狱的设备,iOS中的签名认证机制被Dev Team(破解iOS的某个团队?)从内核中分离出来,这就是为什么越狱设备可以安装非苹果认证程序。
//Library :给开发者使用,用来存储一些东西的文件夹
//Library目录下有两个子目录:Cashes 和 Preferences,
//Cashes:缓存文件夹,用户开过的一些图片,音频,视频,都可以存储到这个文件夹中,一般的APP清除缓存的意思就是清除这个文件夹中的所有内容;Cashes目录用于存放应用程序专用的支持文件,保存应用程序再次启动过程中的需要调用的信息
//Preference 包含应用程序的一些偏好设置文件, 给开发者存储一些内容,NSUserDefaults保存的信息都在这个文件夹中,您不应该直接创建偏好设置,应该是使用NSUserDefaults类来取得和设置应用程序的偏好
//tmp:临时文件,存储网络请求过程中的一些临时文件,在APP版本更新的同时会直接清空,保存的时程序再次启动过程中不需要的一些信息
//简单对象写入本地
简单对象 NSString NSNumber NSDictionary NSArray NSData
//获取当前应用程序的沙盒路径
NSString *homeDir = NSHomeDirectory();
//获取Documents目录路径的方法:
NSArray *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES)lastObject];
//获取Caches目录路径的方法:
NSArray *cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask, YES)lastObject];
//获取tmp目录路径的方法
NSString *tmpDic =NSTemporaryDirectory();
//获取应用程序程序包中资源文件路径的方法
//例如获取程序包中一个图片资源(apple.png)路径的方法
NSString *imagePath = [[NSBundlemainBundle]pathForResource:@"apple"ofType:@"png"];
UIImage *appleImage =[[UIImagealloc]initWithContentsOfFile:imagePath];
//代码中mainResource类方法用于返回一个代表应用程序包的对象
//1. 拼接一个存储路径
//系统提供一个函数,可以直接返回某一个沙盒文件夹的路径
//返回值:找到的路径组成的数组,如果搜索的是系统的沙盒文件夹路径,数组中只有一个元素
//参数1:搜索沙盒中的哪个文件夹
//参数2:搜索的范围
//参数3:返回的是相对路径还是绝对路径
//NO相对路径
//YES绝对路径,给系统看
NSArray *array =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
NSLog(@"%@",array);
//获取文件路径
NSString *docPath = [array lastObject];
//拼接一个文件的路径
//文件有后缀
//加斜杠代表路径下
NSString *txtPath = [docPath stringByAppendingString:@"/123.txt"];
//2. 按照路径写入
NSString *str =@"we are good ";
//系统提供的方法
//返回值是一个BOOL
// 参数1: 要写入的一个路径
//参数2: 是否对写入的文件进行写保护
// 参数3: 编码格式
// 参数4: 错误信息
NSError *error = nil;
BOOL a = [strwriteToFile:txtPath atomically:YESencoding:NSUTF8StringEncodingerror:&error];
NSLog(@"%d", a);
//读取
NSString *readStr = [[NSStringalloc]initWithContentsOfFile:txtPathencoding:NSUTF8StringEncodingerror:&error];
NSLog(@"%@",readStr);
//数组写入本地
NSArray *arrays = [NSArrayarrayWithObjects:@"姜哥不叫姜哥叫桐哥",@"刘姐",@"刘姥姥",nil];
//拼一个数组保存路径
NSString *arrPath = [docPath stringByAppendingString:@"arr.plist"];
[arrayswriteToFile:arrPath atomically:YES];
NSLog(@"%@", arrPath);
//复杂对象写入本地
#import <Foundation/Foundation.h>
//将数据封装的协议
//NSCoding 把一个类中的数据进行整体的编码,方便进行文件的读写操作
@interface Boss : NSObject<NSCoding>
//魔王类
@property(nonatomic,retain)NSString *name;
@property(nonatomic,retain)NSString *sex;
@property(nonatomic,retain)NSString *number;
@end
#import "Boss.h"
@implementation Boss
- (void)dealloc
{
[_namerelease];
[_sexrelease];
[_numberrelease];
[superdealloc];
}
//解码的过程起始就是初始化一个对象的过程
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [superinit];
if (self) {
//每次都按照之前给定的key给给定的属性赋值
self.name = [aDecoderdecodeObjectForKey:@"name"];
self.sex = [aDecoderdecodeObjectForKey:@"sex"];
self.number = [aDecoderdecodeObjectForKey:@"number"];
}
return self;
}
//编码的方法
- (void)encodeWithCoder:(NSCoder *)aCoder
{
//对每个属性进行标记,对读取数据的时候进行恢复
[aCoderencodeObject:self.nameforKey:@"name"];
[aCoderencodeObject:self.sexforKey:@"sex"];
[aCoderencodeObject:self.numberforKey:@"number"];
}
Boss *boss = [[Bossalloc]init];
boss.name =@"老管";
boss.number =@"20";
boss.sex =@"man";
//将复杂对象写入本地的工具
//参数1:要写入本地的对象
//参数2:要写入的路径
NSString *bossPath = [docPathstringByAppendingPathComponent:@"boss.aa"];
//归档类
BOOL bb = [NSKeyedArchiverarchiveRootObject:boss toFile:bossPath];
NSLog(@"bb = %d",bb);
NSLog(@"%@",bossPath);
[bossrelease];
//从本地读取数据产生一个新的复杂对象
//archive 档案
//反归档类
Boss *bossReturn = [NSKeyedUnarchiverunarchiveObjectWithFile:bossPath];
NSLog(@"%@",bossReturn.name);
//[docPath hash];