2010-07-19 4 views
3

나는 내 애플 리케이션에 액세스해야하는 상당한 양의 데이터를 가지고 있지만 앱에 의해 결코 변경되지 않을 것이다. 현재 JSON 파일 및 SQL 데이터베이스의 다른 응용 프로그램에서이 데이터를 사용하고 있지만 iOS에서는 사용하기가 쉽지 않습니다.iOS 앱에 정적 데이터를 저장하는 가장 좋은 방법은 무엇입니까?

불필요한 기능과 복잡성을 제공하는 CoreData를 사용하고 싶지 않습니다.

PropertyList 파일에 데이터를 저장하고 접근 자 클래스를 작성하는 것이 좋습니까? CoreData 라우트를 사용하지 않고 SQLite를 통합하는 간단한 방법이 있습니까?

+0

이 데이터를 PropertyList에 저장하는 것이 좋습니다. 얼마나 많은 데이터를 가지고 있는지 모르겠지만 수천 개의 행이 없다면 PropertyList가 좋은 방법이라고 생각합니다. 또 다른 질문은 데이터를 쿼리해야합니까? 그래서 sqlite가 답이 될 수 있습니다. – choise

답변

4

데이터 양이 비교적 적은 경우 plist 만 사용할 수 있습니다. Plist는 메모리에 완전히로드되므로 필요에 따라 plist에서 만든 모든 객체를 한 번에 메모리에서 유지할 수있는 경우에만 사용할 수 있습니다.

핵심 데이터에는 학습 곡선이 있지만 사용시 일반적으로 SQL보다 덜 복잡합니다. 대부분의 경우 "단순한"SQL은 더 많은 코딩을 이끌어냅니다. 왜냐하면 절차 적 SQL을 객체 지향 API에 부어 넣기 위해 Core Data의 많은 기능을 복제해야하기 때문입니다. 유지 관리를 추적하여 모든 데이터의 메모리 사용을 수동으로 관리해야합니다. 데이터를 원할 때마다 많은 SQL 코드를 작성했습니다. SQL에서 Core Data로 몇 가지 응용 프로그램을 업데이트했으며 모든 경우 Core Data 구현이 SQL보다 작고 깨끗합니다.

메모리 또는 프로세서 "오버 헤드"가 더 이상 없습니다. 핵심 데이터는 고도로 최적화되어 있습니다. 대부분의 경우, 선반 코어 데이터는 손으로 조정 한 SQL보다 더 효율적입니다. SQL에서 하나의 부차적 인 최적화는 대개 그것이 가질 수있는 이론적 인 이점을 파괴합니다.

물론 C 언어로 SQL을 관리하는 데 매우 숙련 된 사용자라면 SQL을 사용하여 개인적으로 더 빨리 시장에 출시 할 수 있습니다. 그러나 Apple 플랫폼에서 일반적으로 사용하도록 계획해야하는 것이 궁금하신 경우 Core Data는 거의 항상 해답이며 시간을내어 배워야합니다.

3

코어 데이터 오버 헤드없이 SQLite C API을 사용하여 SQLite를 직접 사용할 수 있습니다.

Here은 사용 사례에서 찾은 튜토리얼입니다. SQLite 데이터베이스에서 일부 데이터를로드하는 것입니다. 희망이 도움이됩니다.

3

데이터의 유형, 크기 및 빈도에 따라 단순하게 유지하고 속성 목록을 사용하는 것이 좋습니다. 그렇지 않으면 SQLite (Jergason의 답변에 문서화 됨)를 사용하면 내가 갈 수있는 곳이 될 것입니다. 비록 자주 변경되지 않는 기본 유형 (배열, 사전, 숫자, 문자열)이 비교적 적은 (2 백 개 미만) 세트라면 속성 목록이 제 의견으로는 더 좋은 선택이 될 것이라고 말하지만 .

예를 들어, 제 게임 중 하나에서 어려움 당 하나의 속성 목록에서 레벨을 만듭니다. 난이도 당 소수의 레벨 (99)과 각각 (플레이중인 요소의 수, 초기 위치, 질량 등)에 대한 작은 세트의 매개 변수가 있으므로 SQLite를 직접 다루지 않아도됩니다. CoreData를 설정하고 유지 관리해야합니다.

1

"최고"는 무엇을 의미합니까? 어떤 종류의 데이터?

개체의 무리라면 JSON 또는 (바이너리) plist는 끔찍한 형식이 아닙니다. 메모리에로드 된 모든 내용을 개체 그래프로 옮기고 싶을 것입니다. 공간 효율성과 로딩 성능을 비교하여 사용할 공간을 선택하십시오.

많은 양의 이진 BLOB 인 경우 BLOB를 큰 파일에 저장하고 파일 (NSDataReadingMapped a.k.a. NSMappedRead)을 메모리 맵핑하고 blob에 인덱스를 사용합니다. iOS 프레임 워크는 이들을 혼합하여 사용합니다 (예 : .png가 많이 있지만 원본 이미지 데이터 만 포함하는 "other.artwork"도 있음).

클래스가 NSCoding 프로토콜을 구현하는 경우 NSKeyedArchiver와 친구들을 사용할 수도 있지만 개체 그래프 관리 오버 헤드가 있으며 생성하는 plist 형식이 정확하게 작동하지 않습니다.

관련 문제