iOS數(shù)據(jù)存取

iOS應(yīng)用數(shù)據(jù)存取的常用方式

XML屬性列表(plist)歸檔
Preference(偏好設(shè)置)
NSKeyedArchiver歸檔(NSCoding)
SQLite3 
Core Data

1.應(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)用的名稱叫Layer)

1-應(yīng)用沙盒.png

應(yīng)用程序包:(上圖中的Layer)包含了所有的資源文件和可執(zhí)行文件
Documents:保存應(yīng)用運(yùn)行時(shí)生成的需要持久化的數(shù)據(jù)拂到,iTunes同步設(shè)備時(shí)會(huì)備份該目錄。例如法挨,游戲應(yīng)用可將游戲存檔保存在該目錄

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/Preferences:保存應(yīng)用的所有偏好設(shè)置葛超,iOS的Settings(設(shè)置)應(yīng)用會(huì)在該目錄中查找應(yīng)用的設(shè)置信息。iTunes同步設(shè)備時(shí)會(huì)備份該目錄

應(yīng)用沙盒目錄的常見(jiàn)獲取方式

沙盒根目錄:

NSString *home = NSHomeDirectory();

Documents:(2種方式)
利用沙盒根目錄拼接”Documents”字符串

NSString *home = NSHomeDirectory();
NSString *documents = [home stringByAppendingPathComponent:@"Documents"];
// 不建議采用延塑,因?yàn)樾掳姹镜牟僮飨到y(tǒng)可能會(huì)修改目錄名

利用NSSearchPathForDirectoriesInDomains函數(shù)

NSUserDomainMask 代表從用戶文件夾下找
YES 代表展開(kāi)路徑中的波浪字符“~”

NSArray *array =  NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

// 在iOS中绣张,只有一個(gè)目錄跟傳入的參數(shù)匹配,所以這個(gè)集合里面只有一個(gè)元素
NSString *documents = [array objectAtIndex:0];

tmp:

NSString *tmp = NSTemporaryDirectory();

Library/Caches:(跟Documents類似的2種方法)
利用沙盒根目錄拼接”Caches”字符串
利用NSSearchPathForDirectoriesInDomains函數(shù)(將函數(shù)的第2個(gè)參數(shù)改為:NSCachesDirectory即可)

Library/Preference:通過(guò)NSUserDefaults類存取該目錄下的設(shè)置信息

2.屬性列表 plist

直接將數(shù)據(jù)寫(xiě)在代碼里面关带,不是一種合理的做法侥涵。如果數(shù)據(jù)經(jīng)常改,就要經(jīng)常翻開(kāi)對(duì)應(yīng)的代碼進(jìn)行修改豫缨,造成代碼擴(kuò)展性低

因此独令,可以考慮將經(jīng)常變的數(shù)據(jù)放在文件中進(jìn)行存儲(chǔ)端朵,程序啟動(dòng)后從文件中讀取最新的數(shù)據(jù)好芭。如果要變動(dòng)數(shù)據(jù),直接修改數(shù)據(jù)文件即可冲呢,不用修改代碼

屬性列表是一種XML格式的文件
如果對(duì)象是NSString舍败、NSDictionaryNSArray敬拓、NSData邻薯、NSNumber等類型,就可以使用writeToFile:atomically:方法直接將對(duì)象寫(xiě)到屬性列表文件plist中,這種“屬性列表文件”的擴(kuò)展名是plist乘凸,因此也稱為plist文件

2-創(chuàng)建plist文件.png

2.1解析plist文件

獲得Plist文件的全路徑

NSBundle *bundle = [NSBundle mainBundle];
NSString *path = [bundle pathForResource:@"shops" ofType:@"plist"];

加載plist文件

_shops = [NSArray arrayWithContentsOfFile:path];
3-plist解析.png

2.2plist注意事項(xiàng)

plist的文件名不能叫做info厕诡、Info之類的

添加plist等文件資源的時(shí)候,一定要勾選下面的選項(xiàng)

4-在項(xiàng)目中添加plist文件.png

3.偏好設(shè)置 NSUserDefaults

很多iOS應(yīng)用都支持偏好設(shè)置营勤,比如保存用戶名灵嫌、密碼、字體大小等設(shè)置葛作,iOS提供了一套標(biāo)準(zhǔn)的解決方案來(lái)為應(yīng)用加入偏好設(shè)置功能
每個(gè)應(yīng)用都有個(gè)NSUserDefaults實(shí)例寿羞,通過(guò)它來(lái)存取偏好設(shè)置
比如,保存用戶名赂蠢、字體大小绪穆、是否自動(dòng)登錄

4.NSKeyedArchiver

如果對(duì)象是NSStringNSDictionary虱岂、NSArray玖院、NSDataNSNumber等類型第岖,可以直接用NSKeyedArchiver進(jìn)行歸檔恢復(fù)
不是所有的對(duì)象都可以直接用這種方法進(jìn)行歸檔难菌,只有遵守了NSCoding協(xié)議的對(duì)象才可以

NSCoding協(xié)議有2個(gè)方法:

encodeWithCoder:

每次歸檔對(duì)象時(shí),都會(huì)調(diào)用這個(gè)方法绍傲。一般在這個(gè)方法里面指定如何歸檔對(duì)象中的每個(gè)實(shí)例變量扔傅,可以使用encodeObject:forKey:方法歸檔實(shí)例變量

initWithCoder:

每次從文件中恢復(fù)(解碼)對(duì)象時(shí)耍共,都會(huì)調(diào)用這個(gè)方法。一般在這個(gè)方法里面指定如何解碼文件中的數(shù)據(jù)為對(duì)象的實(shí)例變量猎塞,可以使用decodeObject:forKey方法解碼實(shí)例變量

5.SQLite3 FMDataBase

SQLite3是一款開(kāi)源嵌入式``關(guān)系型數(shù)據(jù)庫(kù)试读,可移植性好、易使用荠耽、內(nèi)存開(kāi)銷小

SQLite3常用的5種數(shù)據(jù)類型:text钩骇、integerfloat铝量、boolean倘屹、blob

SQLite3是無(wú)類型的,意味著你可以保存任何類型的數(shù)據(jù)到任意表的任意字段中慢叨。比如下列的創(chuàng)表語(yǔ)句是合法的:
create table t_person(name, age);
為了保證可讀性纽匙,建議還是把字段類型加上:
create table t_person(name text, age integer);

在iOS中使用SQLite3,首先要添加庫(kù)文件libsqlite3.dylib和導(dǎo)入主頭文件

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拍谐,一起剝皮案震驚了整個(gè)濱河市烛缔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌轩拨,老刑警劉巖践瓷,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異亡蓉,居然都是意外死亡晕翠,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)砍濒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)淋肾,“玉大人,你說(shuō)我怎么就攤上這事梯影∥自保” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵甲棍,是天一觀的道長(zhǎng)简识。 經(jīng)常有香客問(wèn)我,道長(zhǎng)感猛,這世上最難降的妖魔是什么七扰? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮陪白,結(jié)果婚禮上颈走,老公的妹妹穿的比我還像新娘。我一直安慰自己咱士,他們只是感情好立由,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布轧钓。 她就那樣靜靜地躺著,像睡著了一般锐膜。 火紅的嫁衣襯著肌膚如雪毕箍。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,682評(píng)論 1 312
  • 那天道盏,我揣著相機(jī)與錄音而柑,去河邊找鬼。 笑死荷逞,一個(gè)胖子當(dāng)著我的面吹牛媒咳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播种远,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼涩澡,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了院促?” 一聲冷哼從身側(cè)響起筏养,我...
    開(kāi)封第一講書(shū)人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎常拓,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體辉浦,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡弄抬,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了宪郊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掂恕。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖弛槐,靈堂內(nèi)的尸體忽然破棺而出懊亡,到底是詐尸還是另有隱情,我是刑警寧澤乎串,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布店枣,位于F島的核電站,受9級(jí)特大地震影響叹誉,放射性物質(zhì)發(fā)生泄漏鸯两。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一长豁、第九天 我趴在偏房一處隱蔽的房頂上張望钧唐。 院中可真熱鬧,春花似錦匠襟、人聲如沸钝侠。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)帅韧。三九已至爬范,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間弱匪,已是汗流浹背青瀑。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留萧诫,地道東北人斥难。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像帘饶,于是被迫代替她去往敵國(guó)和親哑诊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

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

  • 沙盒 Plist Preference偏好設(shè)置 NSKeyedArchiver歸檔 / NSKeyedUnarch...
    追風(fēng)者366閱讀 3,357評(píng)論 0 6
  • *面試心聲:其實(shí)這些題本人都沒(méi)怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來(lái)就是把...
    Dove_iOS閱讀 27,166評(píng)論 30 470
  • 應(yīng)用沙盒 每個(gè)iOS應(yīng)用都有自己的應(yīng)用沙盒(應(yīng)用沙盒就是文件系統(tǒng)目錄)及刻,與其他文件系統(tǒng)隔離镀裤。應(yīng)用必須待在自己的沙盒...
    iOS_程序猿閱讀 1,114評(píng)論 0 6
  • 影票類產(chǎn)品愿景 排名按照個(gè)人喜好度由高到低排列 格瓦拉@電影 觀影,享不盡的快捷和愉悅(V5.7.1) 貓眼電影 ...
    知否讀書(shū)閱讀 474評(píng)論 0 2
  • 致自己: 沒(méi)有宏偉的目標(biāo)缴饭,每天想著改變暑劝,每天想著堅(jiān)持,每一天的改變那就是改變颗搂。
    不二的世界閱讀 235評(píng)論 0 0