2010-02-24 85 views
2

我想提供訪問目標C中的sqlite數據庫。我不希望調用者打擾數據庫本身,所以我打算在DataStore.m中做這樣的事情:調用sqlite3_close獲取靜態sqlite3 *句柄

#import "DataStore.h" 
#import <sqlite3.h> 

static sqlite3 *database = nil; 

@implementation DataStore 

+ (void) initialize { 

    if(self != [DataStore class]) 
    return; 

    ... 
    ... 

    sqlite3_open(databasePath, &database); 
} 

+ (NSArray *) readWith:foo:bar { 
    ... 
} 

+ (bool) writeWith:foo:bar { 
    .. 
} 

現在整個事情的問題是:我永遠不會在整個應用程序中調用sqlite3_close。它當然不會看起來優雅。我怎麼能改善這個?

一種方法是在每次訪問時打開和關閉我的數據庫,並擺脫靜態DB句柄。它會是多麼昂貴? PS:我沒有強大的OO背景,所以如果我的想法不好,我不介意完全改變它。

回答

2

您可以使用「析構函數」自動關閉的數據庫退出

__attribute__((destructor)) 
static void close_db (void) { 
    sqlite3_close(database); 
} 
+0

謝謝!像魅力一樣工作。 – ArjunShankar 2010-02-24 08:47:02