2011-06-14 76 views
0

我正在閱讀包含約300條陣列記錄的JSON訂閱源。每個記錄是一個包含約8個條目的對象。啓動後在本地存儲在字典中有很多嗎?存儲300條記錄iPhone

如果是這樣,我應該在每次請求數據時從線上在線讀取數據嗎?

+0

不,不是,你的長度和體積是多少? – Synxmax 2011-06-14 07:32:00

回答

2

使用較少代碼量的方法是將字典存儲在plist中並自行查詢數據。 iPhone可以在沒有延遲的情況下處理300個物體,所以除非必須,否則我不會爲其他任何事情而煩惱。何時刷新飼料取決於您的應用程序邏輯。

NSString *path = [[NSBundle mainBundle] pathForResource:@"feed" ofType:@"plist"]; 
[dict writeToFile:path atomically:YES]; // write 
[dict dictionaryWithContentsOfFile:path]; // read 
[dict enumerateKeysAndObjectsUsingBlock:^(id key,id obj,BOOL *stop){ //iterate 
    NSLog(@"%@",[NSString stringWithFormat:@"%@=%@", key, obj]); 
}]; 

對於更多的性能使用二進制plist。如果您必須進行復雜的查詢,請使用NSPredicate或核心數據。

+1

這不是NSUserDefaults的用途,它適用於首選項和設置。不要使用它來存儲與應用程序相關的數據,或者在文檔目錄中保留plist或使用coredata。這是一個不好的方法。 – 2011-06-14 10:37:19

+0

根據文檔...「默認系統允許應用程序自定義其行爲以符合用戶的偏好,例如,您可以允許用戶確定應用程序顯示的測量單位或文檔自動保存的頻率。通過將值分配給用戶默認數據庫中的一組參數,這些參數被稱爲默認值,因爲它們通常用於確定應用程序在啓動時的默認狀態或缺省情況下的默認行爲。 – 2011-06-14 10:37:45

+0

+1我編輯了答案。真的沒有理由使用'NSUserDefaults'而不是plist。它浪費了一毫秒的時間查找「NSArgumentDomain」,違背了慣例,而且它是爲其他內容設計的,所以有一些額外的信息不需要學習。 – Jano 2011-06-14 11:05:46

-1

是的,你應該在每次請求數據時從線上在線讀取數據。儘管300陣列記錄不是太多的大數據。但是,如果使用實時數據源,則每次請求數據時都應該閱讀數據。

+0

這沒有意義,緩存是客戶端/服務器體系結構的一個組成部分,檢查新數據,但爲什麼每次都下載所有原始數據?您正在使用不必要的帶寬和時間,而不是一個好方法。 – 2011-06-14 07:53:03

3

如果不經常更改,可以將其緩存到核心數據存儲中,並更新不同的,刪除的或新添加的單個記錄,而不是在啓動時重新創建存儲。

即使它經常變化,使用CD的另一個優點是您可以快速查詢您的Core Data存儲以獲取特定記錄,而不是(可能)遍歷每條記錄。