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