头文件:
#import
#define kFilename @"data.sqlite3"
@interface BOOKSQLiteHelper : NSObject
- (NSString *) dataFilePath;
+ (BOOKSQLiteHelper *) getInstance;
@end
实现:
#import "BOOKSQLiteHelper.h"
#import "sqlite3.h"
@implementation BOOKSQLiteHelper
static BOOKSQLiteHelper *instance = nil;
- (id)init
{
self = [super init];
if (self) {
sqlite3 *database;
if(sqlite3_open([[self dataFilePath] UTF8String], &database) != SQLITE_OK){
sqlite3_close(database);
NSAssert(0,@"Failed to open database");
}
}
return self;
}
+ (BOOKSQLiteHelper *) getInstance
{
if(instance==nil){
instance = [[BOOKSQLiteHelper alloc] init ];
}
return instance;
}
- (NSString *)dataFilePath
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
return [documentsDirectory stringByAppendingPathComponent:kFilename];
}
@end
有的同学说你这样init方法不是暴露了吗?事实上,你单例写再好用户也看不到,凑合用可以了。getInstance也是自己用。自己注意就好了。把精力放在用户看的到的地方!