Xcode 4で実行可能ファイルにNSZombieEnabled
とCFZombieLevel
を設定する方法を教えてください。
Xcode 4.xで押す
(またはMenubar
> Product
> Scheme
> Edit Scheme
をクリックします)
[診断]タブを選択し、[ゾンビオブジェクトを有効にする]をクリックします。
これにより、解放されたオブジェクトはNSZombieインスタンスに変換され、再び使用されるとコンソール警告が表示されます。これは、メモリ使用量を増やす(実際には解放されるオブジェクトはありません)が、エラー報告を向上させるデバッグ補助です。
典型的なケースは、あなたがオブジェクトを解放し過ぎて、どれがどれを知らないかです。
-[UITableView release]: message sent to deallocated instance
App Storeへの送信用にアプリケーションをアーカイブした場合、このXcode設定は無視されます。アプリケーションをリリースする前に何も触る必要はありません。
押す ⌥⌘R を維持しながらProduct> Runを選択するのと同じです。 Alt キーが押されました。
[ゾンビオブジェクトを有効にする]チェックボックスをクリックすることは、[引数]タブの[環境変数]セクションに[NSZombieEnabled = YES]を手動で追加することと同じです。
Janoの答えはそれを見つける最も簡単な方法です。スキームドロップダウンバー - >スキーム編集 - > argumentsタブをクリックして、環境変数カラムにNSZombieEnabledを、そして値カラムにYESを追加した場合...
私はこの代替手段がより便利だと思います:
Profile
を選択しますZombies
も選択できます。ゾンビが検出されるとすぐに、問題のオブジェクトがいつ割り当てられ、それが保持または解放されたかを示すきちんとした「ゾンビスタック」が表示されます。
Event Type RefCt Responsible Caller
Malloc 1 -[MyViewController loadData:]
Retain 2 -[MyDataManager initWithBaseURL:]
Release 1 -[MyDataManager initWithBaseURL:]
Release 0 -[MyViewController loadData:]
Zombie -1 -[MyService prepareURLReuqest]
Xcodeスキームの診断タブを使用するのと比較した場合の利点:
診断タブのオプションをオフにし忘れた場合、メモリからオブジェクトは解放されません。
破損したオブジェクトがどのメソッドで割り当て/解放または保持されたかを示す詳細なスタックが表示されます。
Xcode 4.2では
またはProduct
> Scheme
メニューからEdit Scheme
を選択します
Diagnostics
タブからEnable Zombie Objects
を選択します
.xcconfig
ファイルを好む場合は、代わりにこの記事を読むこともできます https://therealbnut.wordpress.com/2012/01/01/setting-xcode-4-0-environment-variables-スクリプトから/
Cocoaは、そのような状況をデバッグするための機能を大幅に強化するクールな機能を提供しています。これはNSZombieEnabledと呼ばれる環境変数です。これを見て このビデオ を見ると、目的CでNSZombieEnabledを設定することができます。