問題タブ [nszombie]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
objective-c - ARC とゾンビ - 所有しているオブジェクトの割り当てが解除されたときに、インスタンス変数内のオブジェクトが解放されないのはなぜですか?
重複の可能性:
ARC + NSZombieEnabled を使用しているときにオブジェクトの割り当てが解除されないのはなぜですか
ゾンビ オブジェクトが有効な ARC を使用するプロジェクトでは、オブジェクトが割り当て解除時に別のオブジェクトへの強い参照を保持している場合、そのオブジェクトは解放されません。
このコードは問題を示しています。
TestOuter インスタンスを割り当てて解放すると、次のログ メッセージが生成されます。
TestInner インスタンスの割り当てが解除されることはありません。ただし、ゾンビをオフにすると、TestInner インスタンスの割り当てが解除されます。
ARC に切り替えた利点の 1 つは、保持されているオブジェクト参照を解放するためだけに dealloc メソッドを実装する必要がほとんどなかったことです。ゾンビを有効にすると、開発中にあらゆる種類の間違いを見つけなければならないのに便利ですが、この利点は実現できないようです。保持されている参照を に設定するためだけに、dealloc メソッドを実装する必要がありますnil
。
ここで何かが足りないのですか、それとも ARC とゾンビを混在させたときにこれが本当に予想される動作ですか?
iphone - メッセージなしでEXC_BAD_ACCESSがクラッシュすることがあります(NSZombieEnabledを設定)
私はRemoteIOを処理して、マイク入力を取得し、それらを少し変更しています。
クラッシュすることEXC_BAD_ACCESS
があり、メッセージが表示されなくなります。
クラッシュを引き起こす行はこれらです。
コードを説明し、
- 「力」は
NSMutableArray
です。 [powers count]
常に変数「i」よりも大きかった
しばらく苦労して、私はそれを修正する良い方法を見つけました。
環境変数。
そこで、クラッシュの理由がわかるように設定NSZombieEnabled
しました。NSDebugEnabled
しかし、変数を設定しても、Xcodeはメッセージを表示しません。(ただし、他の回線からクラッシュが発生した場合は、メッセージが正しく表示されます。)
また、奇妙なことに、実行開始直後にクラッシュすることはありません。平均して1分でクラッシュします。(しかし、時代は本当に異なりました。)
そして、これは少し推測です。レートを以前の半分に下げると、より安定しました。
それで、メソッドがレートの速度に追いつくことができなかっNSMutableArray
たので、それは問題ですか?NSMutableArray
または、他の考えられる理由がありますか?
================================================== =======================================
さらにいくつかのコードがあります。私はこのように力を割り当てました。
powers配列を解放する場所は..
そして他のどこにもありません。
より詳細なコードはこれです。
このdrawRect:メソッドは、ミリ秒ごとにメインスレッド(タイマーによる)から呼び出しています。
--このメソッドでパワーを更新(より具体的には追加)
また、このメソッドはミリ秒ごとに呼び出しています。これはバックグラウンドスレッドで呼び出しています。
したがって、@autoreleasepoolなしでXCodeはリークのアラートのメッセージを表示します
このため、@ autoreleasepool {..}でメソッド(setPower)をブロックしました。
objective-c - スクロール中のUITableViewControllerゾンビ
ハッピー・フライデー。ゾンビの問題をデバッグするのに面白い時間を過ごしています。ロードされたオブジェクトUITableView
からデータソースを取得するがあります。(以下のクラスを参照してください)。アプリが読み込まれると、すべてが正常になります。最初の8語または9語が、期待どおりにテーブルビューに表示されます。ただし、スクロールすると、クラスインスタンス変数値の値としてデバッガーの出力「<Zombie>」に示されているように、オブジェクトにゾンビが含まれています。(スクリーンショットを参照)。これにより、クラッシュが発生します。NSMutableArray
Word
Word
Word
これが品詞です
これはばかげたことだと思いますが、どこが間違っていたのかわかりません。
Instrumentsで「Analyze」を実行しましたが、問題は報告されていません。クラッシュ後、「malloc_history 12440 0x6b1fe70」を実行して出力を確認しましたが、ゾンビを含むオブジェクトのクラス名を除いて、何を探すべきかわかりませんでした。
これを追跡する助けがあれば大歓迎です。
ありがとう!
objective-c - NSZombiesが有効、デバッグ情報
私のMacアプリは、実行ループでexc_bad_accessを使用してクラッシュしています。そこでNSZombiesを有効にしましたが、期待どおりのエラーは表示されません(オブジェクトの割り当てが解除されていないため)。
しかし、コンソールに有用なNSZombieログが見つかりません。問題を特定する方法はありますか?
ios - 割り当て解除されたインスタンスに送信されたメッセージを解決するための ios5 デバイス上の NSZombie
プログラムがシミュレーター上にある場合、NSZombie はインストゥルメントでのみ有効にできるようです。私は Xcode で NSZombie を実行しましたが、割り当て解除されたインスタンスに送信されたこのメッセージは、シミュレーターではサポートされていないビデオ撮影クラスで発生することがわかります。したがって、割り当てが解除されたインスタンスを追跡できません...
デバイスを使用して割り当てを解除する必要がある場合に、どのインスタンスが割り当て解除されているかを知る方法はありますか? ARCでiOS5を使用しています..
よろしくお願いします。
ios - iOS 5 開発で -Os と自動参照カウントを使用して作成された NSZombie
iOS 5 の iPad アプリケーションで奇妙なエラーが発生するのに 1 日を費やしましたが、誰か情報を持っていないかと考えていました。
_currentModel
一般的なセットアップは次のとおりです。との 2 つのメンバー変数を持つ UIViewController サブクラス StoryViewChildController があります_comingModel
。StoryViewChildController には、[[INEWSStoryModel alloc] init]
作成された結果のオブジェクトを呼び出して返すメソッドがあります。の間viewDidLoad
に、次のコード ブロックがあります。これはコードから逐語的にコピーされたものではないことに注意してください-それはより複雑です-しかし、私は要約しようとしています:
その後、ある時点で、_currentModel と _comingModel を他のオブジェクトと交換できるようにする必要があります。私のコードからのそのままのスワップメソッドは次のとおりです。
問題は、リリース構成 (コンパイラの最適化に -Os を使用) でプロジェクトを実行すると、モデル オブジェクトのスワップ中にクラッシュすることです。クラッシュは、Zombie オブジェクトにアクセスしようとしたことが原因です。Instruments を使用してオブジェクトの保持/解放パスを追跡したところ、このメソッドに入ると、予想どおり _currentModel の参照カウントが 1 になりました。ただし、この行INEWSStoryModel *swapModel = _currentModel;
では _currentModel で保持が呼び出されることはないため、次の呼び出し_currentModel = _comingModel;
で参照カウントが 0 にswapModel
落ちます。その後、範囲外になると、別の解放呼び出しが試行され、プログラムがクラッシュします。
コンパイラの最適化は、最適化すべきではない保持呼び出しを最適化しているように思えます。他の誰かがこの種の問題を抱えていますか? 他に何か間違ったことをしている可能性がありますか?必要に応じて、クラスからさらにコードを投稿できます。
その他の興味深い点: swapModel 変数を __autoreleasing に設定すると、コードは機能します。また、swap メソッドの最後に次のコード ブロックを追加すると、コードが機能します。
そのメソッドが行うのは、UIView フレームを調整することだけです。関係のないコードをメソッドの最後に追加してゾンビを作成しないという事実は、コンパイラが正しく最適化していないと私に思わせます。誰にもアイデアはありますか?
objective-c - 実行時にゾンビを検出する
Objective-Cで実行時にゾンビを見つける方法はありますか?
オブジェクトがゾンビのメソッドを呼び出さないようにする方法を探していますが、アプリをクラッシュさせずにメソッドを検出する方法はありますか?
私は、ARCiOS5での弱参照と常識的なプログラミングの実践について知っています。
オブジェクトのサイズを尋ねる方法があると思っていましたが(おそらく「内部」には参照があるだけです)、オブジェクトがまだ存在する場合は、おそらく単一のポインターサイズだけではなく、値を与える必要があります。
使用malloc_size(pointerToObject)
して動作しますか?
更新:ゾンビ検出用のInstrumentsを実行する方法を知っています
objective-c - 変数がゾンビであるかどうか?
変数がゾンビであるかどうかを確認したいのですが、そうでない場合は、このような関数があります。実際に存在する場合はスーパーレイヤーから削除する必要があります。すでに削除されている場合もありますが、ゾンビであるため、クラッシュしています。この点で。実行時に変数がゾンビであるかどうかを確認するにはどうすればよいですか?
私はそれを作成するためにこのコードを持っています:
代わりにこのようなことをする必要がありますか?:
何か助けはありますか?前もって感謝します!
iphone - 混合ARCコードのゾンビ
ARC 対応アプリで非 ARC フレームワークを使用しています。今、私はEXC_BAD_ACCESS
次のような行で奇妙になります:
まず第一に、super
割り当てが解除された可能性のあるオブジェクトではないため、これがどのように可能であるかです。更新: デバッガーはこの行でスタックしましたが、問題は前述の方法の 1 レベル深いところにあることが判明しました。
ゾンビモードで実行すると、次の「ゾンビスタック」が得られます。
URL に問題があるようですが、ARC では、URL が割り当てられないように保持する手段がありません。では、どうすればこの問題を解決できますか。