개체 목록을 저장하는 작은 iPhone 앱이 있습니다. 사용자는 객체를 추가 및 제거 할 수 있지만이 목록은 상당히 작습니다 (대부분의 사용자는 10-30 개의 객체를가집니다). NSUserDefaults
은 더 쉽게 작업 할 수 있지만, sqlite3
은 더 빨라 집니까? 오직 30 개의 "기록"만으로도 눈에 띄는 차이가있을 것입니까?NSUserDefaults 대 sqlite3
답변
NSUserDefaults는 일반적으로 NSString 또는 NSNumber와 같은 기본 개체 인 사용자 기본 설정 용입니다. 속성 목록에있는 개체 컬렉션을 직렬화하는 Sqlite 또는 Core Data는 사용자가 만든 모델 개체와 같은 사용자 데이터를 저장하는 데 유효한 모든 옵션입니다.
속도 차이는 볼 수 없지만 수행중인 작업에 대한 올바른 메커니즘을 선택하는 것이 가장 좋습니다. 그것은 단지 환경 설정을 누른 다음 NSUserDefaults를 사용하십시오, 그렇지 않으면 plist에 개체를 직렬화합니다. 코코아를 처음 접 하셨다면 처음에는 핵심 데이터와 심지어는 sqlite를 피하면서 기본 사항을 먼저 배울 기회를 얻으실 수 있습니다.
저는 코코아를 처음 사용하지만 데이터베이스 시스템을 처음 사용합니다. 제가 읽은 튜토리얼의 대부분은 sqlite 문에 많은 오버 헤드가있는 것처럼 보입니다. 앱이 종료 될 때까지 시작 및 캐시 변경시 모든 데이터를 읽는 것이 표준처럼 보입니다. – respectTheCode
저는 sqlite3을 계속 사용하려고합니다. 이 유형의 데이터에 대한보다 논리적 인 해결책 인 것 같습니다. – respectTheCode
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;
}
다음 프로젝트를 위해이 부분을 조사해야합니다. – respectTheCode
이것은 "NSUserDefaults에 개체를 저장하는 방법"에 대한 대답이며 다른 가능성의 이점에 대해서는 설명하지 않습니다. –
코어 데이터가 최선의 선택입니다 :처럼 보일 것이다
귀하의 방법 이제 iPhone OS 용. – respectTheCode