Xcode 8とSwift 2.3の割り当てツールで奇妙な動作が見られます。私はdeinit
が呼び出されているオブジェクト(A)を持っていますが、A参照が割り当て解除されているオブジェクトの1つを除いてすべて(別のメモリの問題です)、オブジェクトは継続します割当制度に「生きて」永続的に記載されるべきである。私はそれが保持していますデバッグしようとすると、さらに、私が見るすべては次のとおりです。まだオブジェクトが呼び出されていますが、オブジェクトがまだメモリにあります
- がdeinitメソッドへの印刷行を追加:私はdeinitを確認しました
注によって実行されています
- deinitメソッドにブレークポイントを追加する
- A参照が割り当て解除され、
A.__deallocating_deinit
の内部で発生すると主張するリリース(-1)参照カウントを受け取ることを確認します。方法
しかし、いくつかの未知の理由のために、それは固執するように見えます。
本当に、そのオブジェクトの他の参照はありませんか? ARCごとに、オブジェクトは参照カウントが0になるまでオブジェクトの割り当てが解除されません。そのビューの参照を他の場所(他のVC)で保持しているかもしれません。 – Janmenjaya
deinitが呼び出されて(返された)場合、オブジェクトが参照されているかどうかにかかわらず、オブジェクトはほぼ確実になくなります。通常、この種の問題が発生している場合は、期待していないオブジェクトの2番目のコピーがあります。 (「期待していなかった2番目のコピーがあります」というのは、実際には不可能な一見不可能な行動の原因です)。メモリアドレスを確認してください。しかし、私が探しているもう1つのことは、あなたが誤ってオブジェクトを「deinit」に保持しているかどうかです。それは混乱にあなたを得ることができます(しかし、おそらく*おそらく*この症状を引き起こさない;私は余分なコピーを賭けている)。 –
@RobNapier実際に作成されるオブジェクトは1つだけであることを確認しました。 'deinit'が実行されていて、まだオブジェクトを解放していませんでした。私はまだこの問題が起こった理由の100%を理解していませんが、私は最終的に私の問題を解決した答えを以下に加えました。 –