core data
core data 基於model-view-controller(mvc)模式下,為創建分解的cocoa應用程序提供了一個靈活和強大的數據模型框架。 core data可以使你以圖形界面的方式快速的定義app的數據模型,同時在你的代碼中容易獲取到它。core data提供了基礎結構去處理常用的功能,例如保存,恢復,撤銷和重做,允許你在app中繼續創建新的任務。在使用core data的時候,你不用安裝額外的數據庫系統,因為core data使用內置的sqlite數據庫。 core data提供了一個通用的數據管理解決方案來處理那些所有需要數據模型的app(或大或小)。app使用core data來管理數據對象是很多的益處。 蘋果的圖形用戶界面編譯器-interface builder(IB),提供了對core data controller對象的預構建,從而來減少app的用戶界面和它的數據模型之間的粘滯代碼。在使用core data的時候你不需要考慮sql的語法問題,也不需要管理相關的邏輯樹去追蹤用戶的行為,更不用建立新的永久機制。當你寫你app的用戶界面到它的core data模型的時候,它已經為你把所有的東西都做好了。 core data將你app的模型層放入到一組定義在內存中的數據對象。core data會追蹤這些對象的改變,同時可以根據需要做相反的改變,例如用戶執行撤銷命令。當core data在對你app數據的改變進行保存的時候,core data會把這些數據歸檔,並永久性保存。它保存的數據在一些常規的文件,你可以在Finder中可以進行管理,用spotlight進行搜索,備份到cd,和email給朋友或者家人。 在使用core data框架的時候,你可以創建一個管理對象的模型,該模型提供了對模型對象的抽象定義,這也就是我們所知道的entities,它可以在我們的程序中使用。 core data是一個實體-關系模型,該模型是使用Xcode的數據模型設計工具來定義的,對數據實體以及他們的關系提供了豐富的環境。 sqlite mac os x中sqlite庫,它是一個輕量級功能強大的關系數據引擎,也很容易嵌入到應用程序。可以在多個平台使用,sqlite是一個輕量級的嵌入式sql數據庫編程。與core data框架不同的是,sqlite是使用程序式的,sql的主要的API來直接操作數據表。 fmdb FMDB框架其實只是一層很薄的封裝,主要的類也就兩個:FMDatabase和FMResultSet。在使用fmdb的時候還需要導入libsqlite3.0.dylib。 core data允許用戶使用代表實體和實體間關系的高層對象來操作數據。它也可以管理串行化的數據,提供對象生存期管理與object_graph 管理,包括存儲。Core Data直接與Sqlite交互,避免開發者使用原本的SQL語句. 上面的三種,都是在什麼情況下使用呢?有些人肯定是根據自己使用某項技術的時間來決定,例如以前沒用過core data,在編寫ios程序的時候還是使用自己比較拿手的sqlite,或者可能會考慮到在使用coredata自己還要花費額外的時候去學習。 但是仔細想一想,core data是蘋果自己弄的框架,它其實還是和sqlite進行交互的,只是在交互的時候或者處理數據的時候進行了很多的優化,core data可以縮小你的代碼量,而且core data已經優化過很多個版本,還提供了出色的安全性和錯誤處理之外,還提供了對任何競爭性方案的最好的內存可擴展性。換句話說就是,你可能花費了很長時間為某個問題進行優化精心制作了一個方案,但是在性能上的優勢和core data相比,還是相差深遠的。 另外就是core data與Mac OS X的集成非常的好,core data也和IB進行了結合,允許你創建用戶界面,這樣可以幫助你縮短應用程序的設計,實施以及調試周期。 所以在編寫程序的時候盡量使用core data,這樣才是最優的選擇。只有在Core Data is available on iOS 3.0 and later才能使用core data。 至於sqlite和fmdb的使用情況,這個看個人喜好了,個人覺得沒什麼標准。fmdb就是對sqlite的封裝,使用起來有方便的接口,沒那麼麻煩而已。