2009-05-30 11 views
2

개체 목록을 저장하는 작은 iPhone 앱이 있습니다. 사용자는 객체를 추가 및 제거 할 수 있지만이 목록은 상당히 작습니다 (대부분의 사용자는 10-30 개의 객체를가집니다). NSUserDefaults은 더 쉽게 작업 할 수 있지만, sqlite3은 더 빨라 집니까? 오직 30 개의 "기록"만으로도 눈에 띄는 차이가있을 것입니까?NSUserDefaults 대 sqlite3

+0

코어 데이터가 최선의 선택입니다 :처럼 보일 것이다

-(id)initWithCoder:(NSCoder *)coder; -(void)encodeWithCoder:(NSCoder *)coder; 

귀하의 방법 이제 iPhone OS 용. – respectTheCode

답변

5

NSUserDefaults는 일반적으로 NSString 또는 NSNumber와 같은 기본 개체 인 사용자 기본 설정 용입니다. 속성 목록에있는 개체 컬렉션을 직렬화하는 Sqlite 또는 Core Data는 사용자가 만든 모델 개체와 같은 사용자 데이터를 저장하는 데 유효한 모든 옵션입니다.

속도 차이는 볼 수 없지만 수행중인 작업에 대한 올바른 메커니즘을 선택하는 것이 가장 좋습니다. 그것은 단지 환경 ​​설정을 누른 다음 NSUserDefaults를 사용하십시오, 그렇지 않으면 plist에 개체를 직렬화합니다. 코코아를 처음 접 하셨다면 처음에는 핵심 데이터와 심지어는 sqlite를 피하면서 기본 사항을 먼저 배울 기회를 얻으실 수 있습니다.

+0

저는 코코아를 처음 사용하지만 데이터베이스 시스템을 처음 사용합니다. 제가 읽은 튜토리얼의 대부분은 sqlite 문에 많은 오버 헤드가있는 것처럼 보입니다. 앱이 종료 될 때까지 시작 및 캐시 변경시 모든 데이터를 읽는 것이 표준처럼 보입니다. – respectTheCode

+0

저는 sqlite3을 계속 사용하려고합니다. 이 유형의 데이터에 대한보다 논리적 인 해결책 인 것 같습니다. – respectTheCode

2

NSCoding 프로토콜을 사용해보십시오.

@interface Person : NSObject <NSCoding> 

이전 라인은 다음과 같은 방법을 구현하기 위해 약속 : NSCoding 프로토콜을 구현하는 클래스를 선언

-(void)encodeWithCoder:(NSCoder *)coder { 
    [super encodeWithCoder:coder]; 
    [coder encodeObject:firstName forKey:@"firstName"]; 
    [coder encodeObject:lastName forKey:@"lastName"]; 
} 

-(id)initWithCoder:(NSCoder *)coder { 
    [super init]; 
    firstName = [[coder decodeObjectForKey:@"firstName"] retain]; 
    lastName = [[coder decodeObjectForKey:@"lastName"] retain]; 
    return self; 
} 
+1

다음 프로젝트를 위해이 부분을 조사해야합니다. – respectTheCode

+2

이것은 "NSUserDefaults에 개체를 저장하는 방법"에 대한 대답이며 다른 가능성의 이점에 대해서는 설명하지 않습니다. –