2017-07-01 3 views
-1

私は植物のコレクションビューを持つアプリケーションを作っています。私はNSCodingプロトコルを実装するPlantクラスを持っていますので、それらを保存することができます。プラントはplantListという配列に格納されます。NSCodingによるカスタムオブジェクトの配列の保存が非常に遅い

var plantList = [Plant] 

そして、ここで私は私の工場クラスに格納何:植物がplantListまたは植物に追加されるたびに

class Plant: NSObject, NSCoding { 

var name: String 
var species: String 
var nextWateredDate: Date 
var wateringPeriod: Int 
var wateringCount: Int 
var profileImage: UIImage? 

が編集されて、私はそうのようなplantListを保存:

func savePlants() { 
    NSKeyedArchiver.archiveRootObject(plantList, toFile: 
    Plant.ArchiveURL.path) 
} 

私の問題は、plantListに複数の植物がある場合、savePlants()が完了するのに時間がかかりすぎるということです。どのように前進するかわからない、コアデータのような永続的な記憶方法がより速くなるだろうか?私の植物クラスのUIImageをあまりにも多くのデータを格納していますか?

答えて

0

NSCodingは、オブジェクトのシリアル化技術です。選択はキャッシュデータによって異なります。あなたのキャッシュがオブジェクトの束であるなら、私は確かにNSCodingのために行くだろう、それはとても操作が簡単だからです。 NSKeyedArchiverと一緒にNSCodingするのは、NSUserDefaultsにとって大きすぎるデータを保存するのに最適な方法ですが、CoreDataのデータは小さすぎるものではありません。

一方、このコードを最適化する場合は、永続性のためにイメージ全体を保存するのではなく、イメージ名を保存することをお勧めします。イメージをアプリケーションのドキュメントのディレクトリ(もちろん同じ名前)に保存し、デコードした名前を使用してデコードが終了したら取得します。私はそれがあなたに素晴らしいパフォーマンスを与えるかもしれないと思う。

関連する問題