沙盒的原理

沙盒的原理

NSBundle的理解

app的安装目录

 //获取包路径
 NSString *path = [NSBundle mainBundle].bundlePath; 

沙盒

app可以保存自己的一些数据(账号密码,下载音频视频,图片等)

 //获取路径 (函数获取)
 NSString *homePath = NSHomeDirectory();

沙盒文件结构分析:

  1. ** Document文件夹:持久性,备份. **文档文件夹,苹果上线需要同步的文件夹,一般上线app无法在这里存储大量数据,只能储存重要数据.
  2. ** Tmp文件夹:临时文件夹,不持久不备份**.了解,储存临时数据
  3. ** Library/caches 持久不备份**的文件(视频,音频)
    ** Library/Preference 持久,备份 **偏好设置文件夹,储存一些程序的配置信息,账号信息.

获取沙盒指定文件夹的路径:

三种方法
 //此方法加/,很容易忘记 
 NSString *docPath = [homePath stringByAppendingString:@"/Documents"];

 //此方法自动加/,但是文件夹名很可能不记得(加不加/都是一个/)
 docPath = [homePath stringByAppendingPathComponent:@"Documents"];

 //不用记住文件名,系统在一定范围内搜索
 //常用:但是记住这是一个函数返回数组,不是方法.

 NSString *docPath2 = [ NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

NSDocumentDirectory指的是当前目录下的Document文件夹,NSUserDomainMask指的是user的范围内查找.

数据的三种存储方式(存储按钮例子)

  1. XML文件(plist文件)
    1. 创建数据
    2. 拼接文件,路径(系统会根据是否有数据创建文件,没有不会创建文件.
    3. 写入读取数据.(数据 writeToFile方法)
  2. 用户偏好设置:(NSUserDefaults对象)
    1. 创建对象
    2. 存取数据
    3. 外面的代码可能会有[defoults synchronize],立即同步写入的代码.
//创建单例对象
 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
//写入数据
 [defaults setObject:@"lili" forKey:@"name"]; 
//读取数据
 NSString *name = [defaults objectForKey:@"name"];
  1. 归档:(NSKeyedArchiver对象(读入),NSKeyedUnArchiver对象(取入))** 专门用来储存对象的 **.

** 前提1,需要储存的数据必须遵守协议,并且实现必须实现的代理方法(因为归档只是过程你还需要告诉计算机,你需要储存的是对象的那些属性,不然使用程序就会直接崩) **


 //内的实现方法
 //归档只是一个过程,你需要告诉系统你需要存储对象的哪些属性,你可以选择存储部分,但是你取出也只能取出这些 
- (void)encodeWithCoder:(NSCoder *)aCoder{
 [aCoder encodeObject:self.name forKey:@"name"];
 [aCoder encodeInt:self.age forKey:@"age"];
}

//类似重写构造方法,解档(把你解析出来的数据,赋值给你返回的属性啊,不然这个属性还是没有值)
- (instancetype)initWithCoder:(NSCoder *)aDecoder{
 if (self = [super init]) {
 self.name = [aDecoder decodeObjectForKey:@"name"];
 self.age = [aDecoder decodeIntForKey:@"age"];
 }
 return self;
}
 //1.获取路径 
 NSString *path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)lastObject];
 NSString *filePath = [path stringByAppendingPathComponent:@"data.plist"];
 ZLPerson *p = [ZLPerson new];
 p.name = @"lili";
 p.age = 19;

 //2.归档
 //但是归档有一个前提,用户必须遵守NSCoding协议
 [NSKeyedArchiver archiveRootObject:p toFile:filePath];

//3,解档
 ZLPerson *p = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; 

UITabBarController的介绍与使用

在iOS7.0之后TabBarItem中图片和文字都自带渲染色,如何修改渲染色?(默认为蓝色,如果与你本身的颜色发生冲突时,他会显示蓝色,而不显示你需要的颜色)

代码都可以修改,但是storyBoard只能修改图片的颜色,不能修改文字的颜色.

代码修改渲染颜色:
注意:

  1. 修改的是当前UITabbarController控制器对象的tabbar属性中的tintColor可以改变整体的一个颜色(既可以改变文字也可以改变图片).

  2. 修改图片的颜色时,修改图片的渲染模式为源图片颜色模式.

 img = [img imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; 

storyBoard修改渲染颜色:图片,打开图片资源器修改,里面的渲染属性.

APP的主流框架

MVC

你可能感兴趣的:(沙盒的原理)