2016-03-02 51 views
0

我正在構建一個ios應用程序,其中sqlite文件啓動一次並用於所有sqlite事務;這是爲了節省性能。 它被定義爲:檢查sqlite3數據庫爲空

static sqlite3 *dbName = nil; 

在功能方面,我初始化數據庫:

-(int)initialize:(NSString *)dbPath{ 
    if (sqlite3_open_v2(dbPath, &dbName, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL) == SQLITE_OK) { 
     //some codes 
    } 
} 

一些事務之後,我發現sqlite3的實例是NULL和應用程序崩潰。我想知道是否有一種方法來檢查sqlite3實例是否被釋放。

+0

是靜態的嗎?你不應該使用單例模式類,即'DatabaseManager',並保持該類中的實例,以確保它保持其狀態並可以在整個應用程序中訪問? – NSNoob

+0

我會照你說的去做。謝謝 – RamGrg

回答

0

我可以看到兩個潛在的問題:

  1. 您正在打開數據庫多次,最後(我不能說什麼時候),它的放棄和手柄設置爲NULL。這是因爲你沒有防止多次打開它。

  2. 您的代碼顯示sqlite3_open_v2(dbPath, &dbPath, ...哪一個不對。名稱dbName也不是很好的選擇。

這應該可以解決多數認爲:

-(int)initialize:(NSString *)dbPath{ 
    if (dbName == NULL) { 
     if (sqlite3_open_v2(dbPath, &dbName, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL) == SQLITE_OK) { 
      //some codes 
     } 
    } 
} 

你也最好使用Singleton模式,而不是static,因爲它是乾淨多了。