問題タブ [nszombieenabled]

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.

0 投票する
1 に答える
104 参照

ios - iOSメモリ管理の問題

私はこれに関してすでにたくさんの質問があることを知っています、そして私はそれらに従うことを試みました、しかし私はまだ問題が何であるかを理解することができません。

NSZombiesEnabledを有効にしましたが、次のエラーメッセージが表示されます。

エラーの後にbtと入力すると、次のスタックトレースが表示されます。

この行が問題を説明していると思いますが、本当にわかりません。

いつオブジェクトをリリースすべきか迷ってしまうかもしれないと思います。allocを使用するすべてのメソッドの最後で[objectrelease]を実行しようとしました。次に、deallocメソッドで、そのクラスのすべてのプロパティを解放しました。

私は何をする必要がありますか?

0 投票する
1 に答える
398 参照

xcode - Xcode - ゾンビを2つの異なる場所で有効に設定しますか?

NSZombieEnabledスキームの引数タブでゾンビ ( ) を有効にするように設定しました。しかし、最近、「ゾンビオブジェクトを有効にする」というボックスにチェックマークを付けることができる「診断」というタブがあることに気付きました。

ゾンビを有効にするこれら 2 つの方法は同等ですか?

0 投票する
5 に答える
9168 参照

iphone - ARC + NSZombieEnabled を使用しているときにオブジェクトの割り当てが解除されないのはなぜですか

アプリを ARC に変換したところ、View Controller の 1 つで割り当てられたオブジェクトが、その View Controller が割り当て解除されたときに割り当て解除されていないことに気付きました。理由を理解するのにしばらく時間がかかりました。デバッグ中にプロジェクトのゾンビ オブジェクトを有効にしましたが、これが原因であることが判明しました。次のアプリ ロジックを検討してください。

1) ユーザーは、を介して を作成および提示するRootViewControllerアクションを呼び出します。SecondaryViewControllerpresentModalViewController:animated

2)サブクラスである がSecondaryViewController含まれています。ActionsControllerNSObject

3)初期化されたときにActionsController通知を監視し、NSNotificationCenter割り当てが解除されたときに監視を停止します。

4) ユーザーは終了SecondaryViewControllerして に戻りRootViewControllerます。

Enable Zombie Objects をオフにすると、上記は正常に機能し、すべてのオブジェクトの割り当てが解除されます。Enable Zombie Objects をオンにすると、割り当てが解除されActionsControllerても、割り当てSecondaryViewControllerが解除されません。

これにより、アプリで問題が発生し、b/cNSNotificationCenterが通知を送信し続けActionsController、結果のハンドラーによってアプリがクラッシュします。

これを示す簡単なアプリをhttps://github.com/xjones/XJARCTestAppで作成しました。これを確認するには、[ゾンビ オブジェクトを有効にする] をオンまたはオフにしてコンソール ログを調べます。

質問

  1. Enable Zombie Objects のこの動作は正しいですか?
  2. 問題を解決するには、このタイプのロジックをどのように実装すればよいですか。Enable Zombie Objects を引き続き使用したいと思います。

編集 #1: Kevin の提案に従って、これを Apple と openradar ( http://openradar.appspot.com/10537635 ) に提出しました。

編集#2:良い答えの明確化

まず、私は経験豊富な iOS 開発者であり、ARC やゾンビ オブジェクトなどを完全に理解しています。

次に、この特定のクラッシュの回避策は、割り当てが解除actionsControllerされたときにオブザーバーとして削除することsecondaryViewControllerです。また、いつ解放されるかを明示的に設定actionsController = nilするsecondaryViewControllerと、解放されることもわかりました。これらはどちらも優れた回避策ではありません。実際には ARC を使用する必要がありますが、ARC を使用していないかのようにコーディングします (dealloc で iVar を明示的に nil にするなど)。特定の解決策は、これが他のコントローラーの問題になる時期を特定するのにも役立ちません。したがって、開発者は、この問題を回避する時期と方法を決定論的に知ることができます。

良い答えは、ARC + NSZombieEnabled を使用するときにオブジェクトに対して何か特別なことをする必要があることを決定論的に知る方法を説明し、この特定の例を解決し、他の同様の可能性を残さずにプロジェクト全体に一般的に適用することです問題。

これは XCode のバグである可能性があるため、適切な答えが存在しない可能性は十分にあります。

皆さんありがとう!

0 投票する
1 に答える
1521 参照

ios - アーカイブ リリース ビルドの NSZombieEnabled を有効にする

接続された iPad で実行すると、「ゾンビ オブジェクトを有効にする」を介して、または NSZombieEnabled を環境変数として渡すことで、NSZombieEnabled を有効にできます。ただし、NSZombie を有効にしてビルド (つまり、アドホックにアーカイブして配布するようなもの) を作成できないようです。

アーカイブ リリース ビルドで NSZombieEnabled を有効にするにはどうすればよいですか?

コード内から有効になっているかどうかを判断するために使用しているコードは次のとおりです。(getenv("NSZombieEnabled") || getenv("NSAutoreleaseFreedObjectCheckEnabled"))

0 投票する
1 に答える
227 参照

iphone - NSZombieEnabled はアプリのクラッシュを防ぎます

NSZombieEnabled を有効にすると、アプリがクラッシュしなくなりました。デバッガーは私を助けることができるものを何も出力していないので、これが私の唯一の希望でした. なぜこれが起こっているのかについて何か提案はありますか?

ありがとう。

0 投票する
2 に答える
974 参照

ios - NSZombieを有効にすると、これらすべてのリークが発生するのはなぜですか?

最初のアプリが完成に近づいていますが、アプリがメモリリークを引き起こしていることが突然わかりました。いくつかのリークを見つけて修正しました。現在、リークはありませんが、驚いたことに、NSZombieを有効にすると、主にフレームワークからの4000を超えるリークが表示されます。

NSZombieの正確な使用法と混同しています。ゾンビを見つけるためだけに使用されますか、それともリークを見つけるために何らかの形で役立ちますか?

これは、フレームワークに関連するすべてのリークを示すスクリーンショットです。

リークのスクリーンショット

0 投票する
1 に答える
370 参照

ios - NSZombie が ARC で EXC_BAD_ACCESS を指摘しない可能性はありますか?

私は現在、何人かの人々と ios プロジェクトに取り組んでおり、そのうちの 1 人がアプリの一部で ARC を使用することにしました。

残念ながら、現在、バックグラウンドから戻るときにいくつかのクラッシュが発生しています。

アプリケーションをクラッシュさせる手順は次のとおりです。ios-simulator を使用して実行します。

  1. アプリケーションを開始する
  2. ViewController A(ARCでコード化)に乗る
  3. ViewController Bに乗る(ARCでコーディングされていない-正直なところ、それが関連しているかどうかはわかりません-)
  4. アプリケーションをバックグラウンドにします。
  5. メモリ警告をシミュレートします(シミュレータへのthx)
  6. アプリケーションを再起動します。ViewController B になります。
  7. Viewcontroller A に戻ります
  8. メイン関数を EXC_BAD_ACCESS で指定するとアプリケーションがクラッシュする

NSZombieEnabled を YES にしてみましたが、そうするとアプリケーションはクラッシュせず、完全に動作し続けます。

誰かが私にARCとNSZombieEnabledについて迅速かつ明確な洞察を与えることができれば、それがどのように機能するかを知っていると思いますが、明らかに何かが欠けているに違いありません.

とにかく、あなたの助けと時間をありがとう。

0 投票する
1 に答える
103 参照

objective-c - NSZombieEnabledはObjective-Cコードでのみ機能しますか?

Objective-Cプロジェクトで、Cコードを組み込んでいる場合、環境変数NSZombieEnabledは、Cコードで行った誤って割り当て解除された領域をデバッグするのに役立ちますか、それともObjective-C部分でのみ機能しますか?

0 投票する
1 に答える
258 参照

ios - デバッガーなしで NSZombieEnabled

iOS アプリケーションでEXC_BAD_ACCESSクラッシュが発生しましたが、特定の外部アクセサリが接続されている場合にのみ発生します。残念ながら、このアクセサリはデバッグを許可していません (パススルー接続はありません)。NSZombieEnabledアプリケーションをデバイスで直接起動した場合でもアクティブになるように、アプリケーション を永続的に有効にすることはできますか?