沙盒的原理
NSBundle的理解
app的安装目录
//获取包路径
NSString *path = [NSBundle mainBundle].bundlePath;
沙盒
app可以保存自己的一些数据(账号密码,下载音频视频,图片等)
//获取路径 (函数获取)
NSString *homePath = NSHomeDirectory();
沙盒文件结构分析:
- ** Document文件夹:持久性,备份. **文档文件夹,苹果上线需要同步的文件夹,一般上线app无法在这里存储大量数据,只能储存重要数据.
- ** Tmp文件夹:临时文件夹,不持久不备份**.了解,储存临时数据
- ** Library/caches 持久不备份**的文件(视频,音频)
** Library/Preference 持久,备份 **偏好设置文件夹,储存一些程序的配置信息,账号信息.
获取沙盒指定文件夹的路径:
三种方法
//此方法加/,很容易忘记
NSString *docPath = [homePath stringByAppendingString:@"/Documents"];
//此方法自动加/,但是文件夹名很可能不记得(加不加/都是一个/)
docPath = [homePath stringByAppendingPathComponent:@"Documents"];
//不用记住文件名,系统在一定范围内搜索
//常用:但是记住这是一个函数返回数组,不是方法.
NSString *docPath2 = [ NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSDocumentDirectory指的是当前目录下的Document文件夹,NSUserDomainMask指的是user的范围内查找.
数据的三种存储方式(存储按钮例子)
- XML文件(plist文件)
1. 创建数据
2. 拼接文件,路径(系统会根据是否有数据创建文件,没有不会创建文件.
3. 写入读取数据.(数据 writeToFile方法) - 用户偏好设置:(NSUserDefaults对象)
1. 创建对象
2. 存取数据
3. 外面的代码可能会有[defoults synchronize],立即同步写入的代码.
//创建单例对象
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
//写入数据
[defaults setObject:@"lili" forKey:@"name"];
//读取数据
NSString *name = [defaults objectForKey:@"name"];
- 归档:(NSKeyedArchiver对象(读入),NSKeyedUnArchiver对象(取入))** 专门用来储存对象的 **.
** 前提1,需要储存的数据必须遵守<NSCoding>协议,并且实现必须实现的代理方法(因为归档只是过程你还需要告诉计算机,你需要储存的是对象的那些属性,不然使用程序就会直接崩) **
//<NSCoding>内的实现方法
//归档只是一个过程,你需要告诉系统你需要存储对象的哪些属性,你可以选择存储部分,但是你取出也只能取出这些
- (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只能修改图片的颜色,不能修改文字的颜色.
代码修改渲染颜色:
注意:
修改的是当前UITabbarController控制器对象的tabbar属性中的tintColor可以改变整体的一个颜色(既可以改变文字也可以改变图片).
修改图片的颜色时,修改图片的渲染模式为源图片颜色模式.
img = [img imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
storyBoard修改渲染颜色:图片,打开图片资源器修改,里面的渲染属性.
APP的主流框架
MVC