Вызов sqlite3_close для статического дескриптора sqlite3 * - PullRequest
2 голосов
/ 24 февраля 2010

Я хочу предоставить доступ к базе данных sqlite в Objective C. Я не хочу, чтобы вызывающая сторона беспокоилась о самой БД, и поэтому я собираюсь сделать что-то подобное в моем 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 Ответ

2 голосов
/ 24 февраля 2010

Вы можете использовать «деструктор» для автоматического закрытия базы данных при выходе

__attribute__((destructor))
static void close_db (void) {
   sqlite3_close(database);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...