爲什麼NSKeyedArchiver性能如此之差?大小加倍與使用NSArchiver。NSArchiver vs NSKeyedArchiver性能
我有以下行
BOOL result = [NSArchiver archiveRootObject:self.appDataObject.materias toFile:archivePath];
的NSMutableArray的編碼對象的NSMutableArray中包含有其相應的encodeWithCoder和的initWithCoder自定義對象
-(void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject: _fileName];
[aCoder encodeObject: _categoria];
[aCoder encodeObject: _materia];
[aCoder encodeObject: _nombre];
[aCoder encodeObject: _position];
[aCoder encodeValueOfObjCType:@encode(BOOL) at:&_favorite];
}
-(id)initWithCoder:(NSCoder *)aDecoder
{
if (self=[super init]) {
[self setFileName:[aDecoder decodeObject]];
[self setCategoria:[aDecoder decodeObject]];
[self setMateria:[aDecoder decodeObject]];
[self setNombre:[aDecoder decodeObject]];
[self setPosition:[aDecoder decodeObject]];
[aDecoder decodeValueOfObjCType:@encode(BOOL) at:&_favorite];
}
return self;
}
它工作得很好,因爲它妥善保存該文件然後我可以解開它。他們是3000個左右對象和輸出文件是關於900KB
當我改變我的歸檔線出現該問題:
BOOL result = [NSKeyedArchiver archiveRootObject:self.appDataObject.materias toFile:archivePath];
一切神奇的作品比雙打但文件大小更2MB!
爲什麼我問這個?因爲我正在開發iOS應用程序,因此失去了對NSArchiver的支持。
是的,我瞭解NSKeyedArchiver的優點,但是如果我不需要向後兼容性呢?只需要表現?在這個例子中,我甚至沒有使用鍵,對象仍然使用相同的編碼器串聯保存,我只使用「鍵控」命令,但仍然保存舊的方式。該文件需要超過15秒才能加載到Iphone中,這對於用戶體驗來說非常重要。 – 2012-01-10 18:24:54
您是否考慮過替代存儲技術,如代碼數據?您是否需要立即使用所有3000個對象,還是可以以頁面或塊的形式訪問它們? – Rayfleck 2012-01-10 18:34:39
爲了簡單起見,我使用了NSArchiver。 NSPropertyListSerialization不允許自定義對象。我一直在查詢3000個項目,所以他們必須記憶。不記得爲什麼我停止使用核心數據,它通常比Archiver更高效嗎? – 2012-01-10 19:22:12