2011-01-11 63 views
2

我一直在閱讀iOS固件中包含的SQLite3,它可以滿足我爲我寫的應用程序的需求。SQLite在iOS應用生命週期中的持久性

我無法弄清楚的是,它是持久的還是像一些物體一樣消失。

例如,如果我做sqlite3_open()似乎是一個C函數而不是一個Objective-C對象,如果我在我的應用程序的開始時打開它,它會保持持久性,直到我關閉它,無論有多少視圖推/流行到處都是。

很明顯,這取決於我放在哪裏,但如果我正在做一個通用應用程序,並具有一些中央功能來加載/保存iPhone/iPad共有的數據,如果在我的didFinishLoading中:打開SQLite數據庫,然後調用各種查詢的exec,是否會在應用程序的整個生命週期內保持持久性。

我是最好打開和關閉根據需要,我從PHP背景的,所以我通常會在腳本的開始打開一個數據庫,然後運行許多查詢,然後終於接近它在瀏覽器輸出之前。

從我在過去幾個月中瞭解到的關於iOS編程的第1,000,000條中,我認爲後者可能是更好的方式,因爲應用程序可能會過早退出或轉到後臺。

我想就我的想法再次發表意見。

回答

0

我不直接知道,但我認爲你是對的 - 你只需要在你的應用程序開始時打開它。

看着sqlitepersistentobjects,適用於iOS的ORM框架,它只是opens the DB其第一次使用的時候,從來沒有關閉它除非有打開它的問題:)

+0

謝謝克里斯,我擔心打開/讀取/關閉的開銷,如果需要很多請求 – JamesB 2011-01-11 21:00:06

0

單打開整個從不同的應用程序中使用SQLite數據庫在你的應用程序的地方是好的。

您正在使用令人困惑的單詞「persistent」。你的意思是「重複使用單一連接,在應用程序中執行不同的語句,可能來自不同的線程」。持久性在數據庫環境中具有完全不同的含義 - 這意味着所請求的數據修改已經安全地存儲到介質(磁盤,閃存驅動器),並且設備甚至可能意外關閉而不會影響寫入的數據。

建議從單個專用線程繼續運行sqlite語句。

不建議從不同進程連接到sqlite數據庫並執行並行修改。

一個好的替代解決方案是使用sqlite異步擴展,它將所有寫入發送到專用的後臺線程。

如果您想使用sqlite的自定義構建(更新版本),您可以檢出https://github.com/mirek/CoreSQLite3框架。