2

在我的 ios 应用程序中,我使用 FMDB 连接到 sqlite3 数据库。在应用程序中,db将用于多线程。因此,我以这种方式创建了一个单例:

+ (id)instance
{
static DBManager *dbManager = nil;
if (dbManager == nil) {
    dbManager = [[DBManager alloc]init];
}

[dbManager initialDBmanager];
return dbManager;
}

但是 Error: FMDataBase is current in use ,有时会发生。然后我更新实例:

+ (id)instance
{
static DBManager *dbManager = nil;
if (dbManager == nil) {
    dbManager = [[DBManager alloc]init];
            [dbManager initialDBmanager];
}

while([dbManager.db inUse])//In my opinion this promises the db is free
    {
    }
return dbManager;
}

错误仍然存​​在。所以我的问题是如何正确创建单例以及为什么代码无法避免错误。谢谢!

4

1 回答 1

1

我使用@synchronized,它暂时解决了这个问题。

我会一直关注的~

于 2011-05-09T14:16:20.827 回答