我正在設計一個使用核心數據結構的Objective-C中的應用程序。保存具有許多冗餘信息的對象(使用核心數據)
我有以下結構:
@interface classA : NSManagedObject
@property(nonatomic, strong) someType1 * property1;
..
@property(nonatomic, strong) someTypeN * propertyN;
@property(nonatomic, strong) NSSet * children;
@end
和
@interface classB : classA
@property (nonatomic, strong) classA * parent;
@end
我有以下特點:
1)CLASSA的每個對象將在ClassB的許多兒童。 (classB中的對象本身沒有孩子)。 2)此外,classB的大多數對象將與它們的父對象共享許多共同的屬性(例如,您可以認爲在大多數情況下,只有屬性1在classB的對象和其父對象中的相同屬性之間纔會有所不同classA,因此對於classB中的x x.property2 = x.parent.property2等等)。
3)我只會通過對類型爲classA的對象的請求來查詢數據庫。
我正在尋找一種方法,通過只存儲類型爲classB的對象的必要屬性來減少我的應用程序的磁盤內存使用量。舉例來說,我可以保持CLASSB的對象設置爲nil的性質,除非它從其父的一個不同,定義CLASSB的吸氣劑:
- (sometypeX*) getPropertyX {
if (propertyX) return propertyX;
return parent.propertyX;
}
我的問題是: 1)我真的要去通過用零值而不是實際值填充我的數據庫來獲得磁盤內存 2)這樣的構造是否存在缺陷 3)是否有更好的方法/設計模式來處理這個問題?
在此先感謝您的幫助。
爲了清楚我正在考慮磁盤內存(將所有對象存儲在數據庫中),而不是內存。我認爲你的答案涉及後一種情況? – vib 2015-04-01 15:39:43
@ user3246191我不認爲*這種方法會爲您節省任何磁盤空間。 *在同一頁面上查看* uniquing *。核心數據不會創建重複記錄。一個例外是大的NSData對象可能被緩存在虛擬內存中(在你的應用程序的臨時目錄中)。在這種情況下,您應該自己將文件寫入磁盤,並將路徑存儲在Core Data中。 – 2015-04-01 15:45:26
順便說一句,雖然我99%確定你的方法不會給你顯着的內存改進,但我不太確定磁盤空間的改進。您可能想要組合一個示例應用程序來衡量差異。 – 2015-04-01 15:46:41