状況:クラスA(祖父母クラス)はクラスB(親クラス)を保持し、クラスB(親クラス)はクラスC(子クラス)を保持する。次にクラスBを削除した場合、何が起こるかクラスAおよびクラスCは保持サイクルとメモリリークの原因になりますか?私はクラスBを削除した場合クラス(中間の階層)が削除されたときの保持サイクルはありますか?
0
A
答えて
0
がどのようにクラスB
を削除しなかったに依存し、次に何が起こるか
あなたは何を意味するのですか? ARCを使用している場合は、release
に電話をかけることはできません。だから、どうやってクラスBを削除したのですか?
クラスAはクラスBの強い参照を保持しているので、クラスBの保持カウントは1です。クラスBのリフレクションカウントを0にし、クラスBをクリーンにする唯一の方法は、クラスBのnilへの参照。
そう、あなたが言うならば、あなたのクラスAであれば
self.classBReference = nil;
、クラスBの参照カウントが0になると明らかにクラスBが割り当て解除されますとクラスBが割り当て解除されますので、クラスCの参照カウントがあるため0になりますクラスCはクラスBによって強く保持され、クラスBはもはや存在しない。したがって、クラスCはARCによって削除される候補になりました。概念の
証明:
ここでは、私のクラスの宣言
class A {
var binstance : B? = B() //Declared as optional because I need to set the reference to nil later :)
deinit {
print("A deinited")
}
}
class B {
var cinstance = C()
deinit {
print("B deinited")
}
}
class C {
deinit {
print("C deinited")
}
}
は今、私は結果Aとして、B及びCは、すべての参照カウントを持つことになり、私のVCでクラスAのインスタンスを作成しています1.
var ainstance : A = A()
私はnilにainstanceを設定すると、ここでの通話
のシーケンスがあるのself.ainstance.binstance = nil
O/P
Bは
をdeinited Cは、それがクラスAによって保持されているので、それは参照カウント1を持っているので、それは破壊されないであろう
関連する問題
- 1. ドッカー1.10の後に中間層から削除されたファイルにアクセスする方法はありますか?
- 2. 保持サイクルはありますか?
- 3. UICollectionViewとそのcollectionViewLayoutの間に保持サイクルがありますか?
- 4. ラーベルモデル削除階層
- 5. 前方宣言されたクラス階層のshared_ptr間のキャスト
- 6. さまざまなクラスの階層を持つJTreeとTreeModel?
- 7. 階層内の選択されたノードを再帰とジェネリックで削除する
- 8. ActionScriptクラス階層を表示するためのツールはありますか?
- 9. SQL Server 2008のテーブルの階層削除
- 10. SQLテーブル内の階層データの削除
- 11. 仮想テーブルのコンパイル時間の削除?私はこの階層を持っていると仮定すると
- 12. クラスとオブジェクトの階層
- 13. GCPにはアカウント階層化の概念がありますか?
- 14. ObservableCollectionとINotifyPropertyChangeを持つJson.Netクラス階層は直列化されますが、逆シリアル化されません
- 15. シーン間で遷移するときの保持サイクルのトラブル
- 16. 色のクラス階層
- 17. Fluent nhibernateテーブルあたりの階層マッピング
- 18. myClass2に保持サイクルはありませんか?
- 19. idまたはクラスは削除しますが、スタイルは保持します
- 20. クラス階層C++
- 21. "self"をキャプチャするときに弱く保持されたブロックが保持サイクルを引き起こす方法
- 22. 中断されたセッションデータを削除するリスクはありますか?
- 23. 入れ子にされたクロージャの原因はサイクルを保持しますか?
- 24. Clonableクラス階層とunique_ptr
- 25. Amazon DynamoDBとクラス階層
- 26. Djangoフォームウィザード:中間ステップで保存された一時ファイルを削除します
- 27. プロジェクトの階層構造に問題がありますか?
- 28. 別のクラスの保護されたデストラクタを持つオブジェクトを削除する
- 29. MVC 5 Entity Framework 6 - ネストされた/階層的なデータを削除する
- 30. 計算されたプロパティで保持サイクルが可能か?
をdeinited。それは強い参照サイクルを作成します。その他:https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html – KKRocks