2012-03-21 9 views
0

私は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]; 
+1

うん、別々のファイルとして画像を保存すると、ファイル名によってそれらを参照するのあなたの考えは、私がやると思います正確に何です。レコード数が十分に大きくて、非画像フィールドをすべて読み込んでも時間がかかり始めると、非画像データのCore Dataに切り替える可能性があります。 – yuji

+0

UIImageをNSDataにシリアライズする簡単なコード例がありますか?それは私が取り組んでいるプロジェクトにとっては有用で、他の人にとっては間違いないでしょう。 –

答えて

2

あなたの提案が健全です。リレーショナルデータベースを想像してみてください。私は1つのフィールドに画像をblobとして保存しません。バイナリデータを大量に保存するには、ファイルシステムが非常に適しています。また、ファイルの複製などの簡単な方法も提供します。

plistにリファレンスを保存すると、解析が非常に速くなり、必要なときにのみイメージを処理する簡単なタスクが読み込まれます。

+0

バックアップをありがとう、ニック。優秀に働いた! 20個のアイテムでは、plistは約5 KBにとどまり、画像を使用する必要があるときにのみ呼び出されます。 –

1

iOSプログラミング:Big Nerd Ranch Guideは、第3版の第14章でこのソリューションの完全な例を示しています。完成したソリューションのために、自分のサイトからアクセス可能なコードをダウンロードするだけです。

iOS Programming 3rd edition

Download Solutions

+0

これは実際に問題に直接答えるわけではありませんが、誰かをどこかで指摘すれば、問題の「解決済み」バージョンの完全な実例を見ることができます。 – AndrewPK