2010-02-24 4 views
2

Je souhaite fournir l'accès à une base de données sqlite dans l'Objective C. Je ne veux pas que l'appelant s'inquiète de la DB elle-même et j'ai donc l'intention de faire quelque chose comme ça dans mon DataStore.m :Appeler sqlite3_close pour un handle sqlite3 * statique

#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 { 
    .. 
} 

maintenant, le problème avec la chose: je ne deviendrai jamais appeler sqlite3_close dans toute l'application. Cela n'a certainement pas l'air élégant. Comment pourrais-je améliorer cela? Une façon serait d'ouvrir et de fermer ma base de données sur chaque accès, et de se débarrasser de la poignée de DB statique. Combien cela coûterait-il?

PS: Je n'ai pas une solide expérience OO et donc si mon idée est mauvaise, je ne me dérange pas de changer complètement.

Répondre

2

Vous pouvez utiliser un "destructor" pour fermer automatiquement la base de données quit

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

Merci! Travaillé comme un charme. – ArjunShankar