0

TL:DR-カメラ画像を保存するNSData属性があり、その属性にアクセスするたびにディスク使用量が増加します。

ロングバージョン:私のアプリケーションには、カメラから撮影した写真を保存するために使用するPhotoクラスがあります。これは、自動的に生成されたコードです。

@interface Photo : NSManagedObject

@property (nonatomic, retain) NSData * original;
@property (nonatomic, retain) NSData * thumbnail;
@property (nonatomic, retain) NSDate * createdAt;
@property (nonatomic, retain) Patient *patient;

@end

*originalとは両方ともxcdatamodelファイルで*thumbnail設定されています。Allows External Storage各写真オブジェクトは、保存された後、約4MBのスペースを使用します。コードのある時点で、私はこれを行います:

NSData *original = photo.original

何らかの理由で、ラインが最初に実行されるとき、オブジェクトごとに、アプリによるディスク容量の使用量が4MB増加します。なんらかの理由で、CoreDataがに含まれているデータを複製して再度保存していたかのようです。photo.original

なぜこれが発生するのかわかりません。コアデータプロファイルがデバイスで機能せず、シミュレーターがカメラをサポートしていないため、Instrumentsは役に立ちませんでした。

問題が何であるかについて誰かが何か考えを持っていますか?

4

2 に答える 2

1

Appleのドキュメントに概説されているように、永続ストアタイプを一時的に変更することを検討してください。速度は問題ではないため、XMLはデバッグに適しています。そこから、ストアファイルを直接開いて、それがどの程度正確に拡張されているかを観察できます。

于 2012-10-18T02:31:15.537 に答える
1

私には合理的な行動に聞こえます。NSData インスタンスがロードされると、システムはそのバッファをメモリに保持しようとします。しかし、サイズが大きすぎると、キャッシュ ファイルに裏打ちされた仮想メモリにデータが格納されてしまいます。iPhone 4S では、最大の画像キャプチャは 3264×2448 で、表示されている 4MB のファイルに簡単に変換できます。

ファイル パスのみを保持するように Core Data モデルを変更します。次に、画像を別のファイルとしてそのまま保持します。

于 2012-10-18T02:04:17.693 に答える