0

当我在我的应用程序中遇到一些性能问题并发现我以一种糟糕的方式使用数据库访问时。
所以我决定转向单例模式。
我需要有人检查此代码并确认我通过单例模式进行了良好的数据库访问,或者我做错了什么:
这是类:

@interface DataAccessController : NSObject{
    sqlite3 *databaseHandle;
}
+ (id)sharedManager;
-(void)initDatabase;
...
+ (id)sharedManager {
    static DataAccessController *sharedMyManager = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedMyManager = [[self alloc] init];
    });
    return sharedMyManager;
}

- (id)init {
    if (self = [super init]) {
        [self initDatabase]; // open database connection
    }
    return self;
}
...

AppDelegate.m

DataAccessController *d = [DataAccessController sharedManager];

每次我需要使用的数据时通过应用程序使用:

DataAccessController *d = [DataAccessController sharedManager];
NSMutableArray* data = [d getAllRecordedUnits];
4

1 回答 1

1

数据库访问的问题不在于您是否使用单例模式,而在于您是始终从主线程还是从其他线程访问数据库

事实上,在大多数情况下,我使用单例来访问数据库(尽管通过在我的应用程序委托中保持数据库连接)。但是你应该确保你总是在主线程上访问数据库(如果你从不同的线程大量访问它可能会表现不佳),或者为不同的线程保留不同的上下文,在需要的地方同步它们。

看看这里的解释:

Apple 核心数据文档

Apple 核心数据性能注意事项

苹果核心数据并发

于 2013-10-28T11:34:09.340 回答