2011-02-02 5 views
4

私は以前よりゾンビを使用していませんでしたが、私はそれが何をしているのか分かりません。しかし、1つのことは私に関係しています:XCodeゾンビは、ライブバイトを増やすCFArrayを示します。

CFArrayは、ライブバイト数と#Livingカラム数を増やしているようです。これは、私のアプリがちょうどそこに座って、レンダリング(OpenGL)し、入力を待っているときです。

私はリーク機器を実行しようとしましたが、この期間中にメモリーリークが発生していることを示していません。 CFArrayにとどまらず、何にも割り当てはありません。

私はどちらの機器を信じるべきですか?それとも、ゾンビの楽器が実際に何をしているのか分かりませんか?

誰かが私を指し示すことができるゾンビに関するまともな文書がある場合、それはクールだ。 Appleのドキュメントはそれを少しでも光っているようだ。

答えて

6

NSZombiesは、デフォルトでは、割り当て解除されたオブジェクトを、デアロック(明らかに悪いこと)の後にアクセスした場合に、開発者に通知するプレースホルダを置き換えます。これにより、保持/解放の問題を解決するのに役立ちます。

これをオンにすると、本当に割り当てが解除されることがないため、アプリがふるいのようにメモリをリークしているように見えます。一般に、NSZombiesを使用してデバッグ中に特定のクラッシャを探します(または、Allocations計測器でゾンビをオンにすることができます - メモリ使用量が上がるだけであることを警告する必要があります)...私はリークまたは割り当てを使用します機能するアプリケーションでメモリ分析を行うための機器。

SO上のもう一つの良い質問/回答は:ゾンビを有効にWhat is NSZombie?

+0

ああ! OK、情報ありがとう。私は本当に私のアプリが正常に動作しているようだが、私はそれを使用する必要はありませんね。乾杯! – Dave

2

が自分の保持カウントが(通​​常は、deallocをこの時点で呼ばれることになると、オブジェクトのメモリが解放されるだろう)0に到達したときにObjCインスタンスが解放されません見ています。具体的には、deallocが呼び出されますが、オブジェクトは解放されず、refカウントが後で使用できるようになります。

もちろん、これは実装の詳細です。メッセージングシステムのどこかで、ゾンビにメッセージを送信しないことを確認します(ゾンビは保持カウントが0のオブジェクトです)。ゾンビにメッセージを送ると、システムはこれを検出します(ゾンビを有効にして実行しているときに遭遇した可能性があります)。

+0

情報ありがとう、ジャスティン! +1、しかしrcw3は有用なビデオにつながるリンクのおかげで、受け入れられた答えにあなたを打ちのめすだけです。 (彼はまた、あなたよりも担当者が必要です!) – Dave

+0

@大歓迎です。幸せなゾンビの狩猟 – justin