iOS中常用存儲(chǔ)方式

今天講四種,CoreData 這哥么我會(huì)專(zhuān)門(mén)講.別急

Preference(偏好設(shè)置)

NSKeyedArchiver歸檔(NSCoding)

SQLite3

Core Data

應(yīng)用沙盒

每個(gè)iOS應(yīng)用都有自己的應(yīng)用沙盒(應(yīng)用沙盒就是文件系統(tǒng)目錄)培廓,與其他文件系統(tǒng)隔離耍铜。應(yīng)用必須待在自己的沙盒里,其他應(yīng)用不能訪問(wèn)該沙盒

應(yīng)用沙盒的文件系統(tǒng)目錄闪盔,如下圖所示(假設(shè)應(yīng)用的名稱(chēng)叫Layer)

下圖 结序,layer 為資源包

圖片描述

模擬器應(yīng)用沙盒的根路徑在: (apple是用戶(hù)名, 8.0是模擬器版本)

/Users/apple/Library/Application Support/iPhone Simulator/8.0/Applications

應(yīng)用沙盒結(jié)構(gòu)分析

應(yīng)用程序包:(上圖中的Layer)包含了所有的資源文件和可執(zhí)行文件

Documents:保存應(yīng)用運(yùn)行時(shí)生成的需要持久化的數(shù)據(jù)障斋,iTunes同步設(shè)備時(shí)會(huì)備份該目錄。例如徐鹤,游戲應(yīng)用可將游戲存檔保存在該目錄(很少用垃环,蘋(píng)果可能不審核通過(guò))

tmp:保存應(yīng)用運(yùn)行時(shí)所需的臨時(shí)數(shù)據(jù),使用完畢后再將相應(yīng)的文件從該目錄刪除。應(yīng)用沒(méi)有運(yùn)行時(shí),系統(tǒng)也可能會(huì)清除該目錄下的文件垒棋。iTunes同 步設(shè)備時(shí)不會(huì)備份該目錄

Library/Caches:保存應(yīng)用運(yùn)行時(shí)生成的需要持久化的數(shù)據(jù)吱晒,iTunes同步設(shè)備時(shí)不會(huì)備份該目錄。一般存儲(chǔ)體積大、不需要備份的非重要數(shù)據(jù)

Library/Preference:保存應(yīng)用的所有偏好設(shè)置,iOS的Settings(設(shè)置)應(yīng)用會(huì)在該目錄中查找應(yīng)用的設(shè)置信息。iTunes同步設(shè)備時(shí)會(huì)備份該目錄

Plist 的存儲(chǔ)

NSSearchPathForDirectoriesInDomains 注意:返回的是一個(gè)數(shù)組

接下來(lái)直接上代碼

//?點(diǎn)擊存儲(chǔ)的調(diào)用-?(IBAction)save:(id)sender?{????//?數(shù)據(jù)存儲(chǔ),是保存到手機(jī)里面,

//?Plist存儲(chǔ),就是把某些對(duì)象寫(xiě)成plist文件,之前我們的plist文件描述數(shù)組,字典

//?plist存儲(chǔ)一般用來(lái)存儲(chǔ)數(shù)組和字典

//?Plist存儲(chǔ)是蘋(píng)果特有,只有蘋(píng)果才能生成plist

//?plist存儲(chǔ)不能存儲(chǔ)自定義對(duì)象

NSDictionary?*dict?=?@{@"age":@"18",@"name":@"USER"};

//?保存應(yīng)用沙盒(app安裝到手機(jī)上的文件夾)

//?Caches文件夾

//?在某個(gè)范圍內(nèi)容搜索文件夾的路徑

//?directory:獲取哪個(gè)文件夾

//?domainMask:在哪個(gè)范圍下獲取?NSUserDomainMask:在用戶(hù)的范圍內(nèi)搜索

//?expandTilde是否展開(kāi)全路徑,YES:展開(kāi)

NSString?*cachePath?=?NSSearchPathForDirectoriesInDomains(NSCachesDirectory,?NSUserDomainMask,?YES)[0];????NSLog(@"%@",cachePath);

//?拼接文件路徑

NSString?*filePath?=?[cachePath?stringByAppendingPathComponent:@"dict.plist"];

//????//?獲取應(yīng)用沙盒//????NSString?*homePath?=?NSHomeDirectory();????//????NSLog(@"%@",homePath);

//?File:文件全路徑?=>?所有文件夾路徑?+?文件路徑

[dict?writeToFile:filePath?atomically:YES];

}//?點(diǎn)擊讀取的調(diào)用-?(IBAction)read:(id)sender?{

NSString?*cachePath?=?NSSearchPathForDirectoriesInDomains(NSCachesDirectory,?NSUserDomainMask,?YES)[0];????NSLog(@"%@",cachePath);

//?拼接文件路徑

NSString?*filePath?=?[cachePath?stringByAppendingPathComponent:@"dict.plist"];

//?存的時(shí)候用什么對(duì)象存,讀取的時(shí)候也是用什么對(duì)象讀取

NSDictionary?*dict?=?[NSDictionary?dictionaryWithContentsOfFile:filePath];

NSLog(@"%@",dict);

}

偏好設(shè)置存儲(chǔ) NSUserDefaults

直接上代碼

-?(IBAction)save:(id)sender?{????//?偏好設(shè)置NSUserDefaults

//?底層就是封裝了一個(gè)字典,利用字典的方式生成plist

//?好處:不需要關(guān)心文件名,快速進(jìn)行鍵值對(duì)存儲(chǔ)

//?name?USER

[[NSUserDefaults?standardUserDefaults]?setObject:@"USER"?forKey:@"name"];????//?age?18

[[NSUserDefaults?standardUserDefaults]?setInteger:18?forKey:@"age"];

[[NSUserDefaults?standardUserDefaults]?setBool:YES?forKey:@"isOn"];

}

-?(IBAction)read:(id)sender?{

NSString?*name?=?[[NSUserDefaults?standardUserDefaults]?objectForKey:@"name"];??BOOL?ison?=??[[NSUserDefaults?standardUserDefaults]?boolForKey:@"isOn"];

NSLog(@"%@?%d",name,ison);

}

歸檔

自定義對(duì)象一般使用歸檔,為什么自定義對(duì)象需要?dú)w檔,plist存儲(chǔ)不能存儲(chǔ)自定義對(duì)象

如果一個(gè)自定義對(duì)象需要?dú)w檔,必須遵守NSCoding,而且實(shí)現(xiàn)相應(yīng)方法

全選復(fù)制放進(jìn)筆記@implementation?ViewController-?(IBAction)save:(id)sender?{

//?歸檔:自定義對(duì)象一般使用歸檔,為什么自定義對(duì)象需要?dú)w檔,plist存儲(chǔ)不能存儲(chǔ)自定義對(duì)象

Person?*person?=?[[Person?alloc]?init];

person.age?=?18;

person.name?=?@"USER";

//?temp

NSString?*tempPath?=?NSTemporaryDirectory();

//?拼接文件名

NSString?*filePath?=?[tempPath?stringByAppendingPathComponent:@"person.data"];

//?歸檔?????|?archive?v.存檔?n.檔案文件

[NSKeyedArchiver?archiveRootObject:person?toFile:filePath];????//??-[Person?encodeWithCoder:]}

-?(IBAction)read:(id)sender?{????//?什么對(duì)象存,讀取出來(lái)就是什么對(duì)象

//?temp

NSString?*tempPath?=?NSTemporaryDirectory();

//?拼接文件名

NSString?*filePath?=?[tempPath?stringByAppendingPathComponent:@"person.data"];

//?解檔

Person?*p?=?[NSKeyedUnarchiver?unarchiveObjectWithFile:filePath];????//?-[Person?initWithCoder:]

NSLog(@"%@?%d",p.name,p.age);

}

@end//?如果一個(gè)自定義對(duì)象需要?dú)w檔,必須遵守NSCoding,而且實(shí)現(xiàn)相應(yīng)方法@interface?Person?:?NSObject@property?(nonatomic,?assign)?int?age;@property?(nonatomic,?strong)?NSString?*name;@end@implementation?Person//?什么時(shí)候調(diào)用:只要一個(gè)自定義對(duì)象歸檔的時(shí)候就會(huì)調(diào)用//?作用:告訴蘋(píng)果當(dāng)前對(duì)象的哪些屬性需要?dú)w檔-?(void)encodeWithCoder:(NSCoder?*)aCoder

{

[aCoder?encodeObject:_name?forKey:@"name"];//encode??vt?編譯

[aCoder?encodeInt:_age?forKey:@"age"];

}//?什么時(shí)候調(diào)用:只要一個(gè)自定義對(duì)象解檔的時(shí)候就會(huì)調(diào)用//?作用:告訴蘋(píng)果當(dāng)前對(duì)象的哪些屬性需要解檔//?initWithCoder:只要解析一個(gè)文件的時(shí)候就會(huì)調(diào)用-?(id)initWithCoder:(NSCoder?*)aDecoder

{#warning?什么時(shí)候調(diào)用[super?initWithCoder]

if?(self?=?[super?init])?{????????//?注意:需要把解檔的屬性保存到成員屬性

_name?=?[aDecoder?decodeObjectForKey:@"name"];

_age?=?[aDecoder?decodeIntForKey:@"age"];

}????return?self;

}@endimplementation?RedView//?解析文件的時(shí)候調(diào)用//?作用:解析xib,storyboard調(diào)用-?(id)initWithCoder:(NSCoder?*)aDecoder

{????//?這里必須調(diào)用[super?initWithCoder:aDecoder],super?->UIView

//?什么時(shí)候調(diào)用[super?initWithCoder:aDecoder],只要父類(lèi)遵守了NSCoding協(xié)議,就調(diào)用[super?initWithCoder:aDecoder]

if?(self?=?[super?initWithCoder:aDecoder])?{????????NSLog(@"%s",__func__);

}????return??self;

}@end

想學(xué)習(xí)的小伙伴們可以加裙一起交流哦泌绣!626433463

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市预厌,隨后出現(xiàn)的幾起案子阿迈,更是在濱河造成了極大的恐慌,老刑警劉巖轧叽,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件苗沧,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡炭晒,警方通過(guò)查閱死者的電腦和手機(jī)待逞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)网严,“玉大人识樱,你說(shuō)我怎么就攤上這事≌鹗” “怎么了怜庸?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)垢村。 經(jīng)常有香客問(wèn)我割疾,道長(zhǎng),這世上最難降的妖魔是什么嘉栓? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任杈曲,我火速辦了婚禮驰凛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘担扑。我一直安慰自己,他們只是感情好趣钱,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布涌献。 她就那樣靜靜地躺著,像睡著了一般首有。 火紅的嫁衣襯著肌膚如雪燕垃。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,554評(píng)論 1 305
  • 那天井联,我揣著相機(jī)與錄音卜壕,去河邊找鬼。 笑死烙常,一個(gè)胖子當(dāng)著我的面吹牛轴捎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蚕脏,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼侦副,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了驼鞭?” 一聲冷哼從身側(cè)響起秦驯,我...
    開(kāi)封第一講書(shū)人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎挣棕,沒(méi)想到半個(gè)月后译隘,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡洛心,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年固耘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片皂甘。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡玻驻,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出偿枕,到底是詐尸還是另有隱情璧瞬,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布渐夸,位于F島的核電站嗤锉,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏墓塌。R本人自食惡果不足惜瘟忱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一奥额、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧访诱,春花似錦垫挨、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至涡相,卻和暖如春哲泊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背催蝗。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工切威, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人丙号。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓先朦,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親槽袄。 傳聞我的和親對(duì)象是個(gè)殘疾皇子烙无,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容