IOS中數(shù)據(jù)存儲的常用方式:
XML屬性列表(plist)歸檔
Preference(偏好設置)
NSKeyedArchiver 歸檔 (NSCoding)
--------------------
SQLite3 ? ? ?
Core Data
每個ios應用都有自己的應用沙盒(應用沙盒文件系統(tǒng)目錄),與其他文件隔離.應用必須待在自己的沙盒里.其他應用不能訪問.
在Xcode中獲取沙盒的根目錄置:nsLog(@"%@",NSSHomeDirectory()).
沙盒的結(jié)構(gòu)分析:
Documents:保存應用運行時生成的需要持久化的數(shù)據(jù).游戲的存檔可以保存在里面.蘋果規(guī)定:里面不允許保存網(wǎng)上獲取的數(shù)據(jù).上架會被打回
tmp:保存應用運行時所需的臨時數(shù)據(jù),使用完畢后再將相應的文件從該目錄刪除.系統(tǒng)會不定時的刪除.ITunes不會備份
Library/Caches:保存應用運行時生成的需要持久化的數(shù)據(jù),iTunes不會備份,一般存儲體積大,不需要備份的非重要數(shù)據(jù).
Library/Preference :保存應用的所有偏好設置,iOS的Settings(設置)應用會在該目錄中查找應用的設置信息.iTunes會備份
//不同步的可以放大文件
獲取應用沙盒
獲取沙盒指定的目錄:NSString * path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,NO)[0] ? 第一個參數(shù) :要搜索的那個文件夾,第二個參數(shù): 在那個范圍內(nèi)進行搜索,第三個參數(shù)bool類型,要不要展開目錄. 用字符串接收一下
怎么把(字典數(shù)組)寫入沙盒:
Plist(常用)寫入:讀出的時候要不是數(shù)組,就是字典
新建一個字符串獲取要存儲的位;置 ?上同
拼接文件名(文件的全路徑)用:stringByAppendingPathComponent:@".plist"
array writeTofile:(nssting)拼接的全路徑跟文件名atomically(BOOL)比如手機在保存的時候沒電,生成不生成文件夾
讀取plist文件:
[NSArray array(dictionary)WithContentsofFile:拼接的文件名]用一個數(shù)組接收一下 ?
---------------------------------------------------
偏好設置的保存:
例:登陸賬號密碼,....
NSSUserDefaults *def = [NSSUserDefaults ? standardUserDefaults] 獲取偏好設置 返回值是NSSUserDefaults ?
(1)[def setobject :@"存入額內(nèi)容字符串name" forKey :@"name"];
(2)[def setInteger:20(number)類型 forKey:@"age"];
(3)什么類型的就在set后面跟上就行了.
[4]簡寫:[[NSSUserDefaults ?standardUserDefaults]setobject :@"存入額內(nèi)容字符串name" forKey :@"name"];
[def synchronize]在iOS7之前 調(diào)用是立馬寫入,現(xiàn)在是自動寫入 ?沒用了
寫入的默認本質(zhì)是plist形式保存的,是字典形式.
不用關(guān)心路徑和文件名.
讀取:
怎么存的,就怎么取 ? 例
nsstring * str = [def objectForKey:@"name"];
-----------------------------------------
歸檔:在plist中不能儲存自定義的對象(基本使用)
NSKeyedArchiver archiveRootobject:(需要保存的對象) ?toFile:(保存的路徑,(拼接一下.)一般都是保存在沙盒中,)底層會調(diào)用encodeWithCoder方法,問下要保存定義對象的那種屬性.
要保存的對象必須遵守<NSCoding>協(xié)議實現(xiàn)它的encodeWithCoder方法,例[encode (數(shù)據(jù)類型)object:self.name ?Forkey:"name"];
讀取
底層會調(diào)用initWithCoder方法,問你要讀取對象的那些屬性
并且對象需要實現(xiàn)-(instancetype)initWithCoder方法,在解析文件的時候調(diào)用.
instancetype是初始化方法,方法內(nèi)部重寫初始化方法,取出他們的Key ?decode保存時的屬性類型 :取出的屬性 ?并賦值給self.屬性 ? 你要取出的屬性 ?
歸檔注意點:
遵守協(xié)議<NSCoding>
歸檔過程中 保存要實現(xiàn)encodeWithCoder方法
取出的時候要實現(xiàn)initWithCoder方法
如果對象中還有對象的話也需要做歸檔工作
-------------------------------------------
-(void)awakeFromNib
{}這個方法是在XIB或者sb加載"完畢"時調(diào)用的方法
第一次開始做筆記 ,原來以為理解就夠了,誰知道用的時候全忘了-..-,一個ios小白得筆記。希望大家能適應我做筆記得格式。純手打。