私はNSCodingを使用して、いくつかの異なるフィールドを持つカスタムオブジェクトを管理しています。私はiOS 5.0以上をターゲットにしており、ARCに切り替えました。私はすべての作業を行っているが、パフォーマンスに重点を置いている - 私はこのような質問をしていないので、ここでそれが行く:NSCoding、NSData、UIImagesとperformance
UIImageをNSDataに変換し、それをメインのNSCodingファイルに追加するそれは重要です)。複数の画像がある場合、画像名は順次になります(image1、image2、image3など)。次に、UITableView(サイズ変更されたサムネイル)と詳細ビューの両方で画像を使用します。これに対して否定的な点は、plistのバルーンがサイズであることです。これは、すべてのNSDataを一度にロードしているため、初期ロード時間が遅いことを意味します。
この問題を解決し、一度に1つの画像の読み込みを強制する最良の方法は何ですか?私が考えた何
:
私はplistのに配列を追加し、ディスクへのNSDataを書き、アレイへの各画像のファイル名への参照のみを追加します。私は、指定された位置でイメージファイル名を参照し、ディスク上で見つけて使用すると思いますか?
すべての考えが大歓迎です。私は他の何よりも概念的な実装にもっと執着していますし、十分に面倒なことに、これはあまり議論されていないトピックです。
おかげで、
EDIT:
以下の要求として、ここでは画像を撮影したNSDataにそれを回すの例です:
UIImage *originalImage;
NSData *imageData = UIImagePNGRepresentation(originalImage);
//I save it all to the app's document directory
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
//I am using the images in a tableView and thus found it easiest to append the row number to each image filename.
//'y' below is just an integer that corresponds to the number of items in the master array
NSString *fileName = [NSString stringWithFormat:@"image%d.png",y];
documentsDirectory = [documentsDirectory stringByAppendingPathComponent:fileName];
[imageData writeToFile:documentsDirectory atomically:YES];
// NSLog(@"The filename is %@", fileName);
//newObject is an instance of my NSCoding object
[newObject setImageName: fileName];
うん、別々のファイルとして画像を保存すると、ファイル名によってそれらを参照するのあなたの考えは、私がやると思います正確に何です。レコード数が十分に大きくて、非画像フィールドをすべて読み込んでも時間がかかり始めると、非画像データのCore Dataに切り替える可能性があります。 – yuji
UIImageをNSDataにシリアライズする簡単なコード例がありますか?それは私が取り組んでいるプロジェクトにとっては有用で、他の人にとっては間違いないでしょう。 –