なぜNSKeyedArchiverのパフォーマンスが悪いですか? NSArchiverを使用してサイズが倍になります。NSArchiverと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の利点を理解していますが、もし私が下位互換性を必要としないのであれば?パフォーマンスだけが必要ですか?この例では、キーを使用していなくても、オブジェクトは同じコーダーを使用してシリーズに保存されていますが、「キー付き」コマンドだけを使用していますが、古い方法は保存しています。このファイルは、ユーザー体験のためにたくさんあるIphoneで読み込むのに15秒以上かかる。 –
コードデータなどの代替記憶技術を検討しましたか?一度に利用できる3000個のオブジェクトがすべて必要ですか、またはそれらをページやチャンクにアクセスできますか? – Rayfleck
シンプルさのためにNSArchiverと一緒に行きました。 NSPropertyListSerializationはカスタムオブジェクトを許可しません。そして、私は常に3000アイテムを照会しているので、彼らは記憶にいなければなりません。なぜCore Dataを使用しなくなったのかを覚えていないのですが、一般的にArchiverよりも効率的ですか? –