2010-12-19 3 views
4

가끔 변경 될 수있는 개체 목록이 있으며 앱을 닫거나 배경으로 이동할 때마다 영구 캐시를 유지하려고합니다. 목록에있는 대부분의 개체는 변경되지 않으므로 목록을 저장하는 가장 좋은 방법은 무엇인지 궁금합니다. 난 내가 생각해 두 가지 옵션이 있습니다NSKeyedArchiver는 배열의 일부만 인코딩합니다.

  1. 사용 NSKeyedArchiver/unArchiver - 내가 보류 다른 사용자 정의 객체 직렬화있어 개체 때문 가장 편리한 방법이기 때문에,이 방법 난 그냥 사용자 정의 인코딩을 쓸 수 있습니다 방법을 사용합니다. 주요 문제는 Google에서 변경된 객체 만 직렬화하는 방법을 찾지 못했고 매번 전체 목록을 직렬화하는 것이 매우 낭비되는 것입니다.

  2. SQLite 사용 - 이것은 내가 현재 사용하고있는 것입니다. 그리고 최악의 문제는 개체의 속성을 변경하는 것이 매우 복잡하고 훨씬 덜 우아하다는 것입니다.

NSKeyedArchiver의 편의를 즐길 수 있지만 변경된 객체 만 직렬화하는 방법이 있습니까?

+0

핵심 데이터 사용을 고려 했습니까? NSKeyedArchiver는 모든 것을 한 번에 읽을 수 있습니다. – koo

+0

예,하지만 핵심 데이터를 구현하는 것은 내 앱의 큰 변화이자 엄청난 과잉입니다. – Adam

+0

NSKeyedArchiver를 사용하기에 여전히 합리적 인 목록의 크기에 대한 권장 사항이 있습니까? 내 목록에는 약 500-2,000 개의 항목이 저장되며 각 항목은 최대 500 바이트입니다. – Adam

답변

0

아담 코처럼 나는 코어 데이터를 사용하는 것이 좋습니다 : 이런 종류의 문제는 결국 정말 좋은 것입니다!

는 캐시 항목이 서로 독립적 인 경우,이 단순히 NSManagedObject의 얇은 층으로 캐시-항목을 포장함으로써 달성 될 수있다 (즉, 당신은 당신의 응용 프로그램에 사소한 변화에 코어 데이터 혜택을 누릴 수있다).

이 래퍼 엔티티는 캐시 항목의 아카이브 된 버전을 NSBinaryDataAttributeType 유형의 속성에 저장하고 일시적인 속성을 통해 아카이브되지 않은 객체에 대한 액세스를 제공 할 수 있습니다. 예를 들어 Non-Standard Persistent Attributes을 참조하십시오.