2012-09-09 2 views
0

나는 sqlite 데이터베이스에 저장된 간단한 테이블을 가진 앱을 가지고있다. 앱에 mainview이 있고 다른 여러보기는 view1, view2, ....,viewN입니다.iOS : 싱글 톤을 사용하여 sqlite 데이터베이스에 액세스하기

screen.modalTransitionStyle=UIModalTransitionStyleCoverVertical; 
     [self presentModalViewController:screen animated:YES]; 

view1에서, 사용자가 매우 view1 다시 mainview에 데이터베이스를 한 후, 일을하고, 데이터베이스에 액세스 업데이트합니다 :

[self dismissModalViewControllerAnimated:YES]; 
mainview에서, 사용자는이 코드 섹션에 의해 view1로 이동

사용자는 데이터베이스에 액세스하고, 작업을 수행하고, 데이터베이스를 업데이트 한 다음 다시 mainview으로 돌아가는 것과 같은 다른 작업을 수행합니다.

내 질문에 내 경우에는 mainview에서 데이터베이스를 여는 공통 개체를 만드는 데 싱글 톤을 사용하여 데이터베이스를 구성하고 모든 뷰가 데이터베이스에 액세스하거나 데이터베이스를 열 때마다 데이터베이스를 구성해야합니다. , 액세스 한 다음 개별적으로 업데이트하거나 다른 효율적인 방법이 있습니다. 고마워요

답변

2

앱의 구조가 하나의 스레드로만 설명되어 있기 때문에 - 싱글 톤을 사용하는 것은 완벽합니다. 앱이 시작될 때 DB를 한 번만 열어야하고 앱이 끝나거나 앱이 배경으로 돌아갈 때 닫아야합니다 (물론 배경에서 돌아 왔을 때 DB를 열어야합니다)

그건 그렇고, 나는 또한 각보기에 대한 DB를 열고 닫으려고 - 잘 작동합니다. 이 접근법에서 나는 때때로 DB가 닫히기 전에 업데이트가 필요하다는 것을 나타내는 "더티 (dirty)"플래그를 사용합니다. 그러나 이것은 성능에 아무런 차이가없는 것으로 밝혀졌습니다.

싱글 톤을 사용하는 대신 클래스 변수를 사용하거나 응용 프로그램 위임 내에서 선언 할 수 있습니다.이 변수는 코어 데이터의 핵심 텍스트 (코어 데이터의 "컨텍스트"는 사용자의 사례)

어떤 접근 방식을 사용하든 중요한 것은 응용 프로그램이 전화 통화로 인해 "중단"될 수 있기 때문에 DB가 항상 일관된 상태에 있다는 것입니다.

그런데 상황에 따라 코어 데이터가 더 자주 사용되는 경향이 있습니다. 핵심 데이터가 DB 문제의 많은 부분을 처리하므로 일관성있는 상태에서만 절약이 명시 적으로 수행되어야합니다. 하지만 실제로는 데이터가 더 큰 DB인지, 아니면 일부 "영구적 인 객체/속성"인지에 따라 다릅니다.

self.db = [DBController sharedDatabaseController:@"MyDB.sqlite"]; 

모든 파일 :

0

내가 SQLite는 DB를 호출 c 수준의 코드를 피하는 것이 좋습니다 - 이것은 당신이 그것에 '연결'싱글 톤을 사용 https://github.com/JohnGoodstadt/EasySQLite

참조 - SQLite는 이상 간단한 래퍼 시도 그런 다음 공유 된 싱글 톤에 액세스 할 수 있습니다.

int personCount = [_db ExecuteScalar:@"SELECT count(*) FROM person" asInt:YES]; 

DataTable* table = [_db ExecuteQuery:@"SELECT firstname,lastname FROM person"]; 

for (NSArray* row in table.rows) 
{ 
    NSString* firstname = row[0]; 
    NSString* firstname = row[1]; 
    ... 
} 
관련 문제