web-dev-qa-db-ja.com

Xcode 4でNSZombieEnabledを設定する方法

Xcode 4で実行可能ファイルにNSZombieEnabledCFZombieLevelを設定する方法を教えてください。

456
Chetan

Xcode 4.xで押す

R

(またはMenubar> Product> Scheme> Edit Schemeをクリックします)

[診断]タブを選択し、[ゾンビオブジェクトを有効にする]をクリックします。

Click "Enable Zombie Objects"

これにより、解放されたオブジェクトはNSZombieインスタンスに変換され、再び使用されるとコンソール警告が表示されます。これは、メモリ使用量を増やす(実際には解放されるオブジェクトはありません)が、エラー報告を向上させるデバッグ補助です。

典型的なケースは、あなたがオブジェクトを解放し過ぎて、どれがどれを知らないかです。

  • ゾンビと:-[UITableView release]: message sent to deallocated instance
  • ゾンビなし EXC_BAD_ACCESS

App Storeへの送信用にアプリケーションをアーカイブした場合、このXcode設定は無視されます。アプリケーションをリリースする前に何も触る必要はありません。

押す R を維持しながらProduct> Runを選択するのと同じです。 Alt キーが押されました。
[ゾンビオブジェクトを有効にする]チェックボックスをクリックすることは、[引数]タブの[環境変数]セクションに[NSZombieEnabled = YES]を手動で追加することと同じです。

754
Jano

Janoの答えはそれを見つける最も簡単な方法です。スキームドロップダウンバー - >スキーム編集 - > argumentsタブをクリックして、環境変数カラムにNSZombieEnabledを、そして値カラムにYESを追加した場合...

70
learner2010

私はこの代替手段がより便利だと思います:

  1. 「Run Button Dropdown」をクリックしてください。
  2. リストからProfileを選択します
  3. プログラム "Instruments"が表示されたらZombiesも選択できます。
  4. 今すぐあなたのアプリと対話し、エラーを引き起こすことを試みることができます
  5. エラーが発生するとすぐにあなたのオブジェクトがいつ解放されたか、そしてそれ故解放されたかについてのヒントを得るべきです。

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スキームの診断タブを使用するのと比較した場合の利点

  1. 診断タブのオプションをオフにし忘れた場合、メモリからオブジェクトは解放されません。

  2. 破損したオブジェクトがどのメソッドで割り当て/解放または保持されたかを示す詳細なスタックが表示されます。

57
Besi

Xcode 4.2では

  • プロジェクト名/スキームの編集/診断/
  • ゾンビオブジェクトを有効にするチェックボックス
  • あなたはやった
5
pratap shaik

Xcode 7でオン

<

またはProduct> SchemeメニューからEdit Schemeを選択します

DiagnosticsタブからEnable Zombie Objectsを選択します

xcode 7 zombie flag

.xcconfigファイルを好む場合は、代わりにこの記事を読むこともできます https://therealbnut.wordpress.com/2012/01/01/setting-xcode-4-0-environment-variables-スクリプトから/

4
IgnazioC

Cocoaは、そのような状況をデバッグするための機能を大幅に強化するクールな機能を提供しています。これはNSZombieEnabledと呼ばれる環境変数です。これを見て このビデオ を見ると、目的CでNSZombieEnabledを設定することができます。

1
user2554822