2016-08-07 4 views
0

Core Dataと比較してNSUserDefaultに画像を保存することの短所は何ですか? なぜNSUserDefaultに画像を保存するのがベストプラクティスではないのですか?イメージをNSUserDefaultに保存することの短所は何ですか?

私はNSUserDefaultのデータを保存するのがNSDataであることを知っています。しかし、Core Dataでも同じです。では、NSUserDefaultやCore Dataと比較して、スピードはどうですか?

申し訳ありませんが、私はここでコードを提供しません。

+3

Appleはこう言います。「デフォルトシステムでは、アプリケーションがユーザーの好みに合わせて動作をカスタマイズできます。 'NSUserDefaults'は、あなたのアプリのためのplist - userプリファレンスにそのようなものを保存するためのものです。 *資産保管用ではありません。 – Moritz

+1

はい、私はそれを使用して実際の不利な点を参照してくださいすることはできません。 – allenlinli

+2

NSUserDefaultsはモノリシックなファイルなので、イメージアセットをそこに格納すると、パフォーマンスの問題などが発生します。セキュリティ上の問題App Storeの拒否が起こる可能性もあります。フレームワークと戦わず、意図したとおりに使用する理由は他にもたくさんあります。 – Moritz

答えて

2

NSUserDefaultsは、ユーザーデフォルトを格納するために明示的に指定されています。NSUserDefaultsが情報を.plistファイルに書き込むため、画像は特にそこに属しません。生の画像データは.plistファイルに属しません。それとは別に、それはあまり効率的でもありません。.plistファイルに保存する情報が多くなればなるほど、読み込むのに時間がかかります。特定のイメージをロードする場合は、.plistファイル全体をロードする必要があります。これは、必要のない他のイメージもすべてロードする必要があります。簡単に言って:do not do

画像を保存するために、より適切で効率的なアプローチは、アプリケーションの文書ディレクトリ(所属先)に保存することです。

アプリケーションのドキュメントディレクトリに自分の画像を保存した後、あなたのsaveImage機能

let theImage = UIImage(named: "yourImage") 
saveImage(image: theImage!, fileName: "yourImageName") 

を呼び出す

func saveImage(image: UIImage, fileName: String) { 
     let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first 
     let path = documentsURL?.appendingPathComponent(fileName) 

     do { 
      try UIImagePNGRepresentation(image)?.write(to: path!) 
     } catch { 
      // Handle possible errors here 
      print(error.localizedDescription) 
     } 
    } 

あなたの画像を保存する:あなたはこのようにそれを行うことができ

、あなたはカールするイメージのファイルパスを取得し、後でイメージを取得するためにCoreDataデータベースに保存します。

CoreDataでもを自動化これはちょっとした工夫であなたのために行います。バイナリデータ属性に「外部ストレージを許可する」チェックボックスをオンにすると、CoreDataはデバイスのどこかにイメージを保存し、パフォーマンスを維持するためにイメージを実際のイメージではなくデータベースに保存します高い。ここにはmore information about thatがあります。

関連する問題