沙盒的原理
NSBundle的理解
app的安裝目錄
//獲取包路徑
NSString *path = [NSBundle mainBundle].bundlePath;
沙盒
app可以保存自己的一些數(shù)據(jù)(賬號密碼,下載音頻視頻,圖片等)
//獲取路徑 (函數(shù)獲取)
NSString *homePath = NSHomeDirectory();
沙盒文件結(jié)構(gòu)分析:
- ** Document文件夾:持久性,備份. **文檔文件夾,蘋果上線需要同步的文件夾,一般上線app無法在這里存儲大量數(shù)據(jù),只能儲存重要數(shù)據(jù).
- ** Tmp文件夾:臨時文件夾,不持久不備份**.了解,儲存臨時數(shù)據(jù)
- ** Library/caches 持久不備份**的文件(視頻,音頻)
** Library/Preference 持久,備份 **偏好設(shè)置文件夾,儲存一些程序的配置信息,賬號信息.
獲取沙盒指定文件夾的路徑:
三種方法
//此方法加/,很容易忘記
NSString *docPath = [homePath stringByAppendingString:@"/Documents"];
//此方法自動加/,但是文件夾名很可能不記得(加不加/都是一個/)
docPath = [homePath stringByAppendingPathComponent:@"Documents"];
//不用記住文件名,系統(tǒng)在一定范圍內(nèi)搜索
//常用:但是記住這是一個函數(shù)返回數(shù)組,不是方法.
NSString *docPath2 = [ NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSDocumentDirectory指的是當前目錄下的Document文件夾,NSUserDomainMask指的是user的范圍內(nèi)查找.
數(shù)據(jù)的三種存儲方式(存儲按鈕例子)
- XML文件(plist文件)
1. 創(chuàng)建數(shù)據(jù)
2. 拼接文件,路徑(系統(tǒng)會根據(jù)是否有數(shù)據(jù)創(chuàng)建文件,沒有不會創(chuàng)建文件.
3. 寫入讀取數(shù)據(jù).(數(shù)據(jù) writeToFile方法) - 用戶偏好設(shè)置:(NSUserDefaults對象)
1. 創(chuàng)建對象
2. 存取數(shù)據(jù)
3. 外面的代碼可能會有[defoults synchronize],立即同步寫入的代碼.
//創(chuàng)建單例對象
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
//寫入數(shù)據(jù)
[defaults setObject:@"lili" forKey:@"name"];
//讀取數(shù)據(jù)
NSString *name = [defaults objectForKey:@"name"];
- 歸檔:(NSKeyedArchiver對象(讀入),NSKeyedUnArchiver對象(取入))** 專門用來儲存對象的 **.
** 前提1,需要儲存的數(shù)據(jù)必須遵守<NSCoding>協(xié)議,并且實現(xiàn)必須實現(xiàn)的代理方法(因為歸檔只是過程你還需要告訴計算機,你需要儲存的是對象的那些屬性,不然使用程序就會直接崩) **
//<NSCoding>內(nèi)的實現(xiàn)方法
//歸檔只是一個過程,你需要告訴系統(tǒng)你需要存儲對象的哪些屬性,你可以選擇存儲部分,但是你取出也只能取出這些
- (void)encodeWithCoder:(NSCoder *)aCoder{
[aCoder encodeObject:self.name forKey:@"name"];
[aCoder encodeInt:self.age forKey:@"age"];
}
//類似重寫構(gòu)造方法,解檔(把你解析出來的數(shù)據(jù),賦值給你返回的屬性啊,不然這個屬性還是沒有值)
- (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協(xié)議
[NSKeyedArchiver archiveRootObject:p toFile:filePath];
//3,解檔
ZLPerson *p = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
UITabBarController的介紹與使用
在iOS7.0之后TabBarItem中圖片和文字都自帶渲染色,如何修改渲染色?(默認為藍色,如果與你本身的顏色發(fā)生沖突時,他會顯示藍色,而不顯示你需要的顏色)
代碼都可以修改,但是storyBoard只能修改圖片的顏色,不能修改文字的顏色.
代碼修改渲染顏色:
注意:
修改的是當前UITabbarController控制器對象的tabbar屬性中的tintColor可以改變整體的一個顏色(既可以改變文字也可以改變圖片).
修改圖片的顏色時,修改圖片的渲染模式為源圖片顏色模式.
img = [img imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
storyBoard修改渲染顏色:圖片,打開圖片資源器修改,里面的渲染屬性.
APP的主流框架
MVC