これはあなたに起こっているのかどうかはわかりませんが、これが私に起こり、Swiftの内部メモリモデルの結果であることが判明しました。
これを適用するには、Userオブジェクトに対する弱いまたは所有されていない参照が必要です。
この場合、オブジェクトに対する最後の強い参照が削除されると、オブジェクトは初期化されません。参照するオブジェクトは参照カウントを減らし、必要に応じて割り当てを解除し、deinit()メソッドを(あなたのログに示されているように)実行します。ただし、は割り当て解除されません。。
はい、オブジェクトは非初期化できますが、割り当て解除されません。その理由は、このオブジェクトを指す弱いまたは所有されていない参照は、このポインタの後に「安全でない」動作を生成するため、解放された(または悪化した、再割り当てされた)メモリを指すことを許されてはならないからです。その結果、メモリのこのセクションは放棄することができず、オブジェクトは割り当て解除されません。
ただし、2つの良いニュースです。最初に、その特定のオブジェクトだけがリークされます - 参照するオブジェクトのいずれもリークされません。これは、ほんの少しのメモリしか漏れていないことを意味します。だから大したことではないかもしれません。第2に、弱い参照の場合、Swift 4ではこの動作が変更されています(残念ながら未所有の参照にはこの動作があります)。Xcode9ベータ版でプロジェクトを試してみて、それがまだ起こっているかどうかを確認するのは面白いでしょう。
これは、WWDCの同じ種類の質問をしているからです。それが適用可能になることを願って!
この問題は引き続き発生していますか? –