XCode 4.5を使用して新しいCocoa(Mac OS X)アプリケーションを作成し、「ドキュメントベース」オプションをオフにし、「自動参照カウント」をオンにすると、何も変更せずにビルドし、「リーク」を使用してプロファイラーを使用して実行しますテンプレートでは、19.76メガバイトの一時的なメモリ使用量と2.23メガバイトの「ライブバイト」が表示されます。これには、3132 CFStrings、1371 CFBasicHash、およびプログラムが終了してもCoreGraphicsによって割り当てられた192 kbを含む数百の奇数mallocs()が含まれます。これらはすべて「割り当て」タイムラインに表示されますが、「リーク」タイムラインには出力されません。この格差は紛らわしいと思います。
たとえば、簡単なCocoaベースの参照アプリケーションを使用して、可能であれば知りたいのですが、そうでない場合は、どのリークが私のもので、どれが予想されるかを知るための参照手法を知りたいと思います。
Foundation-frameworkにリンクされたコマンドラインツールを使用すると、「すぐに使用できるリーク」の数がはるかに簡単になり、合計で約18のmallocs()、合計1.06 kbになるため、AppKit(Cocoa)がほとんどの原因であるようです。デフォルトの「プログラムの最後にまだヒープ上にある、リークではないライブオブジェクト」。
単純な非リークのCocoaベース参照アプリケーションを作成する方法はありますか、それともフレームワーク自体が(おそらく意図的に)リークしすぎて実際には不可能ですか?
はい、静的分析を知っています。はい、ガベージコレクションを認識しています。誰かがガベージコレクションを使用せず、ARCのみを使用し、実行時に何がリークしたかを実際に確認したい場合、その人は、基盤とフレームワークの14799程度のリークを無視することなく、そうすることができますか?
更新:私自身の混乱のソース#1は、示唆されているように、私が間違ったタイムラインを見ていることです...しかし、私自身の防御(または私の混乱を説明するため)では、私は常にまだ割り当てられているオブジェクトを検討しましたリークとしてのプログラム実行の最後のヒープで、Pascal(Delphi)とC ++の世界で、そして実際にLinuxとWindowsのほとんどのガベージコレクションされていない言語で一般的に見られるルール。たぶん、それはObjective-Cの世界ではまったく「リーク」ではないのでしょうか。メモリタイムラインの「生きているアイテム」はまだ「ヒープ上でアクティブ」ですか?それはリークとどう違うのですか?私のAppControllerが「dealloc」と言われることがないという事実は私にとっても驚きでしたが、「予想される」と言われています。