私はどのように設定するのですNSZombieEnabled
とCFZombieLevel
のXcode 4で私の実行のために?
私はどのように設定するのですNSZombieEnabled
とCFZombieLevel
のXcode 4で私の実行のために?
回答:
Xcode 4.xで
(またはクリックMenubar
> Product
> Scheme
> Edit Scheme
)
[診断]タブを選択し、[ゾンビオブジェクトを有効にする]をクリックします。
これにより、解放されたオブジェクトがNSZombieインスタンスになり、再び使用するとコンソールの警告が出力されます。これは、メモリ使用量は増加しますが(実際にはオブジェクトは解放されません)、エラー報告を改善するデバッグ補助です。
典型的なケースは、オブジェクトをオーバーリリースし、どのオブジェクトかわからない場合です。
-[UITableView release]: message sent to deallocated instance
App Store送信用にアプリケーションをアーカイブする場合、このXcode設定は無視されます。アプリケーションをリリースする前に何かに触れる必要はありません。
押すこと⌥⌘Rは、Altキーを押したまま、[製品]> [実行]を選択することと同じです。
「ゾンビオブジェクトを有効にする」チェックボックスをクリックすることは、「引数」タブの「環境変数」セクションに「NSZombieEnabled = YES」を手動で追加することと同じです。
CMD-<
(CMD-SHIFT-comma
)、またはProduct -> Scheme -> Edit SCheme...
私はこの代替手段がより便利だと思います:
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スキームの診断タブを使用する場合と比較した利点:
診断タブでオプションのチェックを外すのを忘れると、オブジェクトはメモリから解放されません。
破損したオブジェクトが割り当てられた、解放された、または保持されたメソッドを示すより詳細なスタックが表示されます。
iOS Simulator > All
メインテンプレートリストから選択していることを確認してください(これはシミュレータでのみ実行できます)
Xcode 4.2
または> メニューEdit Scheme
から選択Product
Scheme
選択Enable Zombie Objects
形成Diagnostics
タブを
別の方法として、.xcconfig
ファイルを使用する場合は、この記事を読むことができますhttps://therealbnut.wordpress.com/2012/01/01/setting-xcode-4-0-environment-variables-from-a-script/
Cocoaは、このような状況をデバッグする機能を大幅に強化する優れた機能を提供します。これはNSZombieEnabledと呼ばれる環境変数です 。objective-CでのNSZombieEnabledの設定について説明するこのビデオをご覧ください
Xcode> 4.3の場合:
スキームドロップダウンバー->スキームの編集->引数タブをクリックし、環境変数列にNSZombieEnabledを追加し、値列にYESを追加します。
幸運を !!!