2010-02-24 63 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