0

Cocoaデスクトップアプリの特定のメモリ動作を追跡しようとしています。私のアプリはNSImageを使用して多くの画像処理を行い、NSURLConnectionを使用してHTTP経由でそれらの画像をWebサイトにアップロードします。

数百枚の画像(非常に大きいものもあります)をアップロードした後、Instrumentを実行してもリークは発生しません。また、MallocDebugを実行しましたが、リークは発生していません。Instrumentを使用してオブジェクトの割り当てを調べると、次のような出力が得られます。

GeneralBlock-9437184, Net Bytes 9437184, # Net 1
GeneralBlock-192512, Net Bytes 2695168, # Net 14

など、小さいサイズの場合。これらを詳しく見ると、「Foundation」が所有しているとマークされ、NSConcreteMutableDatainitWithCapacityを介して作成されています。HTTPアップロード中に、NSMutableDataを使用して投稿本文を作成しているので、これらはNSMutableDataオブジェクトを作成するときにCocoaがキャッシュしているバッファーだと思います。

ココアにこれらを解放させる方法はありますか?私は90%ポジティブで、正しくリリースしています(そして、InstrumentsとMallocDebugはこれを確認しているようです)が、非常に多くのMSMutableDataバッファーを割り当てているため、Cocoaはパフォーマンス上の理由でこれらを維持していると思います。

4

1 に答える 1

0

自分が所有しているオブジェクトを正しくリリースしていることが確実な場合は、実際にできること(またはすべきこと)はありません。これらのブロックは、Instrumentsが言うようにNSConcreteMutableData、Foundationオブジェクトが作成したため、Foundationが所有しています。これらは意図的に保持されているある種のキャッシュである可能性がありますが、NSDataそれらが何であるかを知る方法はありません。

これがバグであると思われる場合は、http://bugreport.apple.comで報告する必要があります。メモリの所有権のルールは、メモリを適切に管理しないクラスにも適用されます。

また、これはばかげた質問かもしれませんが、Object Allocツールにどのオプションを使用していますか?作成された、または作成されてまだ生きているすべてのオブジェクト?もう重要ではない割り当てを見ているかもしれません。

于 2010-03-29T14:04:01.957 に答える