私は、最新の Cocoa プロジェクトのメモリ管理に GC を使用することにしました。そして、興味深いことを発見しました。Xcode でまったく新しい Cocoa アプリ プロジェクトを作成する場合、GC をサポート対象または必須に変更し (両方を試しました)、ビルドして実行します。リークすると、メモリ リークが表示されます。
ほとんどの場合、NSCFData、GeneralBlock、CGEvent、CFDictionary、CGSRegion などのタイプのオブジェクトの多数の小さなリーク。
再現する手順:
- ファイル -> 新しいプロジェクト -> Cocoa アプリ
- プロジェクト -> プロジェクト設定の編集 -> GC 必須 (またはサポートされている、いずれか)
- ビルド -> ビルド
- 実行 -> パフォーマンス ツールで実行 -> リーク
- リーク検出がトリガーされるのを待ちます (私は 10 秒に設定しています。デフォルトは 30 秒です)。
約 80% の確率で、上記の種類のさまざまなオブジェクトの約 2 ~ 20 KB のリークが発生します。
他の誰かがこれと同じ行動をしていますか?
編集: InputManagers フォルダーの名前を変更して以下の状況をテストしました (その時点でログ メッセージは消えたため、ログ メッセージは確実に読み込まれなくなりました)、まだメモリ リークが発生しています。したがって、それと関係がある可能性は低いと思われます。私はそこにテキストを残しているので、アシュリー・クラークの答えはまだ理にかなっています.
私が知っている唯一の奇妙な状況は、GC を有効にしてアプリを実行するたびに、コンソールに次のメッセージが表示されることです。
2008-12-12 13:03:09.829 MemLeakTest[41819:813] Error loading /Library/InputManagers/Inquisitor/Inquisitor.bundle/Contents/MacOS/Inquisitor: dlopen(/Library/InputManagers/Inquisitor/Inquisitor.bundle/Contents/MacOS/Inquisitor, 265): no suitable image found. Did find:
/Library/InputManagers/Inquisitor/Inquisitor.bundle/Contents/MacOS/Inquisitor: GC capability mismatch
2008-12-12 13:03:09.840 MemLeakTest[41819:813] Error loading /Library/InputManagers/Saft/SaftLoader.bundle/Contents/MacOS/SaftLoader: dlopen(/Library/InputManagers/Saft/SaftLoader.bundle/Contents/MacOS/SaftLoader, 265): no suitable image found. Did find:
/Library/InputManagers/Saft/SaftLoader.bundle/Contents/MacOS/SaftLoader: GC capability mismatch
これは、Safari (プラグイン用) だけでなく、起動するすべてのプログラムにロードしようとする 2 つのプラグインと関係があると思います。それがこれと関係があるかどうかはわかりませんが、間違いなく可能性があるようです。OS X 10.5 の代わりに開発ツールを使用して、SAFT や Inquisitor を使用せずに未使用のインストールで同じことが起こるかどうかをテストするためのクリーンな環境に簡単にアクセスできません。