NSZombieEnabledは、EXC_BAD_ACCESSエラーの原因となっているオブジェクトのタイプを報告しません
-
06-07-2019 - |
質問
何らかの理由でUIKitの奥深くでクラッシュが発生しています。 EXC_BAD_ACCESSエラーが発生しているのは、dismissModalViewController呼び出しの8つの呼び出しのようなものです。 NSZombieEnabledを実行可能ファイルに対して有効にしようとしましたが、ゾンビがオンになっているかどうかに関係なくコンソールログに同じエラーが出力され、どのオブジェクトが問題の原因かわかりません。コンソールに正しい情報を印刷させるために必要なことを逃していますか?
解決
ゾンビの使用について読むこちら。
これをgdbで実行します。 EXC_BAD_ACCESS
を取得したら、その時点でスタックを確認します(gdbのwhereコマンドを使用するか、Xcode GUIデバッガーを実行します)。それでも問題が解決しない場合は、元の質問にスタックを投稿してください。
また、NSObjectsを扱っている場合にのみゾンビが役立ちます。低レベルのmalloc / freeルーチンを使用している場合、ゾンビはそれらの割り当てに対して何も買いません。
他のヒント
先週末、NSZombieEnabledがまったく機能していないように見えたときに知ったことの1つは、非オブジェクトをコードに渡さないようにしてください。
私の場合、NSStringを単に「string」として返していました。 @" string"の代わりに。つまり、NSStringオブジェクトをc-stringで上書きしていました。後でそのオブジェクトに新しい値を書き込もうとすると、BAD_ACCESSを取得していました。 NSZombieはb / cを助けることができませんでした。上書きしようとしたオブジェクトではありませんでしたが、そのc文字列です。
さておき、すべての警告をXCodeのエラーとして扱います-IDE GUIで赤で表示できるようにしたい-それらは時々見逃しがちです。
Modal View Controllerで何かが過剰リリースされているように聞こえます。改行が止まるまで、新しい行をコメントアウトすることから始めます。