2009-08-24 67 views
0

我的應用程序中有一些數據結構,我需要在收到'didReceiveMemoryWarning'通知後堅持。該數據是用戶使用應用程序(這是一款遊戲)執行的所有操作的運行日誌。在低內存上存儲iphone應用程序數據

我擁有的數據可能不是很少(可能>幾百KB),因此plists不會似乎不是正確的解決方案。

兩種可能性中的第一種是歸檔對象並使這些對象支持NSCoding協議。我不確定這是否是正確的選擇路徑。

第二個選項似乎與CoreData,使用NSManagedObjectModel和NSPersistentStoreCoordinator。這是存儲這些對象的好方法嗎?或者它是矯枉過正? (我使用蘋果公司的'食譜'示例應用程序作爲參考)。

我的對象是最終容納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 2009-08-25 11:03:07

+0

修改了我的原始文章以包含此信息。 – 2009-08-25 17:54:00

回答

1

警告,在這裏。如果您的應用程序開始獲取這些消息,並且您正在使用處理程序來寫出巨大的數據,則內核可能不會讓您的應用程序在情況嚴重時(從內核的POV)完成保存任務。無論您使用何種方法處理日誌,您都應該逐漸將這些數據輸出到後備存儲區,這樣您可以確信,如果發生這種情況,您不會丟失任何數據。

+0

謝謝你。我忘記提及我正在計劃定期在應用中保存數據。我只是不知道哪一個更好的使用機制。 – 2009-08-24 21:32:36

0

我會建議幾件事情。

  1. 目前有多少數據實際用於任何事情?如果有一個很好的機會,它沒有被使用,然後保存它。

  2. 多少可以重新創建/重建?

查看Apple提供的SQLite書籍示例。

我正在創建一個應用程序,可以創建一路上的數據。大多數不使用,但我不知道哪些數據將被使用。我所做的是保留一個最有可能使用的數據的小緩存,其餘的數據將實時傳送到SQLite數據庫。我的記憶需求非常小,100K左右。過去它是megs(和崩潰)。

+0

在每個遊戲中,經常使用與活動遊戲以及活動日誌相關的數據。所有其他遊戲數據將被保存。定期地,在主動遊戲中,我必須堅持最近生成的數據。 – 2009-08-25 18:14:48