2011-05-07 4 views
2

내 ios 응용 프로그램에서는 FMDB를 사용하여 sqlite3 db에 연결합니다. 응용 프로그램에서 이 DB는 multithread.As의 결과를 사용합니다,이 방법으로 싱글을 만듭니다다중 스레드 문제가있는 FMDB

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

[dbManager initialDBmanager]; 
return dbManager; 
} 

그러나 오류 : FMDataBase 현재 사용중인 때때로 occures. 다음 인스턴스를 업데이트합니다.

+ (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; 
} 

오류가 여전히 존재합니다. 그래서 내 질문은 올바르게 싱글 톤을 만드는 방법과 코드가 오류를 피할 수없는 이유입니다. 덕분에 !

답변

1

필자는 @synchronized를 사용하며 일시적으로 문제를 해결합니다.

나는 그것을 계속 지켜 볼 것입니다. ~

+1

@synthesized를 사용 했습니까? – Minakshi

+0

이제 각 쓰기 작업에 대해 db에 nslock을 추가합니다. 'synthetic'은 게으른 방법입니다 ~ :-) – scorpiozj