调用sqlite3_close获取静态sqlite3 *句柄

时间:2010-02-24 06:10:42

标签: objective-c sqlite

我想在Objective C中提供对sqlite数据库的访问。我不希望调用者对数据库本身感到困扰,因此我打算在我的DataStore.m中执行类似这样的操作:

#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。它看起来并不优雅。我怎么能改善这个?

一种方法是在每次访问时打开和关闭我的数据库,并摆脱静态数据库句柄。它有多贵?

PS:我没有强大的OO背景,所以如果我的想法不好,我不介意完全改变它。

1 个答案:

答案 0 :(得分:2)

您可以使用“析构函数”在退出时自动关闭数据库

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