在我的ios应用程序中,我使用FMDB连接到sqlite3数据库。 在应用程序中,db将用于多线程。因此,我以这种方式创建一个单例:
+ (id)instance
{
static DBManager *dbManager = nil;
if (dbManager == nil) {
dbManager = [[DBManager alloc]init];
}
[dbManager initialDBmanager];
return dbManager;
}
但错误:FMDataBase目前正在使用中,有时会发生。 然后我更新实例:
+ (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;
}
错误仍然存在。 所以我的问题是如何正确创建单例以及为什么代码无法避免错误。 谢谢!
答案 0 :(得分:1)
我使用@synchronized,它会暂时解决问题。
我会留意它〜