Xcode 4で実行可能ファイルを設定するにはどうすればよいNSZombieEnabled
ですか?CFZombieLevel
7 に答える
Xcode4.xではを押します
⌥</kbd>⌘</kbd>R
(またはMenubar
> Product
>>>をクリックしScheme
ますEdit Scheme
)
[診断]タブを選択し、[ゾンビオブジェクトを有効にする]をクリックします。
これにより、解放されたオブジェクトがNSZombieインスタンスに変わり、再度使用するとコンソールの警告が出力されます。これは、メモリ使用量を増やす(実際にはオブジェクトが解放されない)が、エラー報告を改善するデバッグ支援です。
典型的なケースは、オブジェクトをオーバーリリースし、どれがわからない場合です。
- ゾンビの場合:
-[UITableView release]: message sent to deallocated instance
- ゾンビなし:
このXcode設定は、AppStore送信用にアプリケーションをアーカイブするときに無視されます。アプリケーションをリリースする前に何も触れる必要はありません。
押す⌥</kbd>⌘</kbd>R is the same as selecting Product > Run while keeping the Alt key pressed.
Clicking the "Enable Zombie Objects" checkbox is the same as manually adding "NSZombieEnabled = YES" in the section "Environment Variables" of the tab Arguments.
Janoの答えは、それを見つける最も簡単な方法です。別の方法は、スキームのドロップダウンバー->スキームの編集->引数タブをクリックし、環境変数列にNSZombieEnabledを追加し、値列にYESを追加することです。
私はこの代替案がより便利だと思います:
- 「実行ボタンのドロップダウン」をクリックします
- リストから選択します
Profile
- プログラム「Instruments」が開き、選択することもできます
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スキームの診断タブを使用する場合と比較した場合の利点:
診断タブのオプションのチェックを外すのを忘れた場合、オブジェクトはメモリから解放されません。
破損したオブジェクトがどのメソッドで割り当て/解放または保持されたかを示す、より詳細なスタックを取得します。
Xcode4.2では
- プロジェクト名/編集スキーム/診断/
- [ゾンビオブジェクトを有効にする]チェックボックス
- 完了です
Xcode7でオン
⌘</kbd><
または>メニュー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を追加し、[値]列に[はい]を追加します。
幸運を !!!