2009-08-24 4 views
0

'didReceiveMemoryWarning'알림을 받으면 계속 유지해야하는 앱에 데이터 구조가 있습니다. 데이터는 사용자가 앱 (게임)을 사용하여 수행 한 모든 동작에 대한 일종의 로그입니다.낮은 메모리에 iphone 응용 프로그램 데이터 저장

데이터가 너무 작아서 (가능한 수백만 KB 미만) 올바른 해결책 인 것처럼 보입니다.

두 가지 가능성 중 첫 번째는 개체를 보관하고 이러한 개체가 NSCoding 프로토콜을 지원하도록하는 것입니다. 이것이 올바른 길을 선택하는 것이 확실하지 않습니다.

두 번째 옵션은 CoreData와 NSManagedObjectModel 및 NSPersistentStoreCoordinator를 사용하는 것 같습니다. 이 객체를 저장하는 좋은 방법입니까? 아니면 잔인한가요? (Apple의 'Recipes'샘플 앱을 사용하고 있습니다.)

내 개체는 결국 NSString, NSNumber, NSInteger 및 기타 간단한 유형을 보유하는 사용자 지정 개체 유형입니다. 내가 가지고있는 데이터 유형의 일부

샘플 :

// this the base object I need to start with to persist 
@interface MyDataObject : NSObject 
{ 
    MyScore  *aScore; 
    // Contains an object of type 'MyAction' 
    NSMutableArray *allActions; 
} 

@interface MyScore : NSObject 
{ 
    NSInteger currentScore; 
    NSDate  lastUpdated; 
} 

@interface MyAction 
{ 
    NSNumber *actionId; 
    NSString *description 
    MyUser  *associatedUser; 
} 
@interface MyUser 
{ 
    NSNumber *id; 
    NSString *name; 
    NSString *email; 
} 

사용자는 다른 게임의 무리를 재생할 수 있으며, 각 게임에 대한, 나는 그들이이 만든 이동 무엇의 활동 로그를 가지고있다. 사용자는 게임을하는 동안 각 게임에서 지금까지 만든 동작을 볼 수 있으며 활성 동작 인 & 사이를 전환하여 과거 동작도 검토 할 수 있습니다.

+0

데이터를 사용할 대상을 게시하는 것이 적절합니다. 데이터 액세스/검색 방법이 더 나은 솔루션에 영향을 미칩니다. – Jacob

+0

이 원본 정보를 포함하도록 수정했습니다. –

답변

1

경고. 앱이 이러한 메시지를 받기 시작하고 처리기를 사용하여 거대한 데이터를 작성하는 경우 상황이 심각하다면 (커널의 POV에서) 앱이 데이터를 저장하지 못할 수도 있습니다. 로그와 함께 사용하는 방법이 무엇이든이 데이터를 백업 저장소로 점차적으로 떨어 뜨려야하므로 이러한 상황이 발생하면 데이터가 손실되지 않는다고 확신 할 수 있습니다.

+0

감사합니다. 나는 앱에서 데이터를 주기적으로 유지할 계획이라고 언급하는 것을 잊었다. 어느 것이 더 좋은 메커니즘인지는 모르겠습니다. –

0

몇 가지 제안합니다.

  1. 현재 실제로 얼마나 많은 데이터가 사용되고 있습니까? 사용하지 않을 가능성이 높으면 저장하십시오.

  2. 얼마나 재현/재구성 할 수 있습니까?

Apple에서 제공 한 SQLite 서적을보십시오.

나는 길을 따라 데이터 덩어리를 만드는 앱을 개발 중이다. 대부분은 사용되지 않지만 어떤 데이터가 사용될 지 전혀 알지 못합니다. 내가하는 일은 데이터의 작은 캐시를 사용하는 것이고, 나머지는 실시간으로 SQLite 데이터베이스로갑니다. 내 기억 요구 사항은 100K 정도로 매우 작습니다. 과거에 그것은 megs (그리고 충돌)이었다.

+0

각 게임 내에서 활성 게임 및 활동 로그와 관련된 데이터가 자주 사용됩니다. 다른 모든 게임 데이터가 저장됩니다. 주기적으로, 활성 게임 내에서 가장 최근에 생성 된 데이터를 유지해야합니다. –