保存數(shù)據(jù)的基礎(chǔ)知識(shí)

iOS Persistence and Core Data Lesson 1- Udacity的筆記

筆記目錄:
1.保存數(shù)據(jù)的基礎(chǔ)知識(shí)(所在章節(jié))
2.如何使用NSCoder/NSKeyedArchiver保存數(shù)據(jù)
3.Core Data的使用
4.Core Data的構(gòu)建
5.Core Data的框架
各文章的介紹:我的女朋友CoreData和她閨蜜們


前言

通過(guò)將數(shù)據(jù)緩存在本地,可以有效減少http請(qǐng)求數(shù),和提升用戶體驗(yàn)。

本文章要解決的問(wèn)題:
要保存數(shù)據(jù)。
1.首先要知道什么時(shí)候保存恰當(dāng)?
2.然后要知道怎么保存?即是用什么類(class)和方法(method)?

App Life Cycle

要了解iOS如何將數(shù)據(jù)存在本地,先來(lái)了解一個(gè)App的生命周期(App Life Cycle).

一個(gè)App的狀態(tài)

或者你已經(jīng)注意到了,App有兩個(gè)表示正在運(yùn)行的狀態(tài)(state)

  • Active.這狀態(tài)(state) 表示app正在遠(yuǎn)行,并且占據(jù)控制整個(gè)屏幕。
  • Background.這狀態(tài)表示app正在運(yùn)行,但是沒有占據(jù)控制整個(gè)屏幕。例如:我們打開微信回復(fù)微信,并且使用網(wǎng)易云音樂聽歌。其中網(wǎng)易云音樂就是處于Backgruond.

當(dāng)然,除了表示正在運(yùn)行的狀態(tài),也有表示不在遠(yuǎn)行的狀態(tài)(state)

  • Not Running.表示這個(gè)App還沒有打開過(guò)。
  • Inactive.表示這個(gè)App曾經(jīng)打開過(guò)并且運(yùn)行的,但遇到user(用戶)按下了home鍵,或者是收到了電話。

如下,第五的狀態(tài)是很少見到的。

  • Suspended.表示App 可在后臺(tái)(background)運(yùn)行,但是沒有做任何事情。

這些狀態(tài)的轉(zhuǎn)換都會(huì)作為app生命周期事件(app lifecycle event)傳遞給AppDelegate.

Life Cycle Method

狀態(tài)轉(zhuǎn)換是通過(guò)Delegate通知AppDelegated,其中管理狀態(tài)轉(zhuǎn)換(Managing State Transitions)的Delegate method,如下:
以下兩個(gè)method是,Not Running 轉(zhuǎn) Active 狀態(tài)

  • application(_:willFinishLaunchingWithOptions:)
  • application(_:didFinishLaunchingWithOptions:)

以下這method是任一 state 轉(zhuǎn)為 Active狀態(tài)

  • applicationDidBecomeActive(_:)
  • applicationWillResignActive(_:)

以下method如其名字所說(shuō)

  • applicationDidEnterBackground(_:)
  • applicationWillEnterForeground(_:)

這method是轉(zhuǎn)為Not running時(shí)

  • applicationWillTerminate(_:)

例子

將上面AppDelegate的method中加入相應(yīng)print語(yǔ)句觀察狀態(tài)轉(zhuǎn)換。

按照相應(yīng)gif的操作,在終端有如下輸出:


第一次啟動(dòng)時(shí)


startTheApp.gif

App Delegate: will finish launching
App Delegate: did finish launching
App Delegate: did become active


按下home鍵時(shí)


homeButton.gif

App Delegate: will resign active
App Delegate: did enter background


按下app按鈕回到Foreground時(shí)


backToForeground.gif

App Delegate: will enter foreground
App Delegate: did become active


lock的時(shí)候


Lock.gif

App Delegate: will resign active
App Delegate: did enter background


解鎖的時(shí)候


unLock.gif

App Delegate: will enter foreground
App Delegate: did become active


雙機(jī)home鍵然后向上滑動(dòng)結(jié)束app


twiceHomeButton.gif

App Delegate: will terminate
也可以是App Delegate: did enter background.
關(guān)鍵是看app是否支持background 執(zhí)行.


保存數(shù)值的類和方法

了解完一個(gè)app的state轉(zhuǎn)換。然后就到用什么類了。
其它更多特性的類和方法,留在以后章節(jié)介紹。
這里是使用比較簡(jiǎn)單的類。能用它保存用戶設(shè)定的值

NSUserDefaults 保存值

用NSUserDefaults保存數(shù)值

NSUserDefaults.standardUserDefaults().defaults.setFloat(22.5 forKey: “myValue”)

用NSUserDefaults取回?cái)?shù)值

let value = NSUserDefaults.standardUserDefaults().floatForKey(“myValue”)

保存文件

app文件保存目錄

每個(gè)app都是獨(dú)立的。沙盒結(jié)構(gòu)。
app目錄


App File結(jié)構(gòu)
  • Documents/目錄
    這里保存著user可以訪問(wèn)的files,面向user的files。

  • Library/Application support/目錄
    通常來(lái)說(shuō),這目錄保存這一個(gè)app運(yùn)行需要的file,但是對(duì)user隱藏。

  • Documents/ and Application Support/目錄
    默認(rèn)是自動(dòng)備份的

  • tmp/目錄
    系統(tǒng)會(huì)清除里面的數(shù)據(jù),當(dāng)app不再運(yùn)行時(shí)。

  • Library/Caches/ 目錄
    這目錄下的數(shù)據(jù)比tmp/目錄下的數(shù)據(jù)活得舊一點(diǎn),但是相比Support/目錄下活得短一點(diǎn)
    因?yàn)橄到y(tǒng)會(huì)刪除 Caches/ 來(lái)解放存儲(chǔ)空間。所以這些數(shù)據(jù)file應(yīng)該可以是重新獲取的。

建立FilePath

let filename = "usersVoice.wav"
let dirPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as! String
let pathArray = [dirPath, filename]
let fileURL =  NSURL.fileURLWithPathComponents(pathArray)!

用NSFileManager檢查文件是否存在

if NSFileManager.defaultManager().fileExistsAtPath(audioFileURL().path!) {
    shouldSegueToSoundPlayer = true       
}

本章節(jié)是是使用NSDefault 保存數(shù)值,下一章節(jié)如何使用NSCoder/NSKeyedArchiver保存數(shù)據(jù),介紹如何保存復(fù)雜的Object

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容