[英]How to modified object of child viewcontroller from parent viewcontroller from in swift
[英]Swift How to return child object that keeps parent object as long as child lives in memory
我考慮是否可以從在父對象中創建的函數子對象返回,該子對象將保留對其父對象的引用並防止父對象從內存中釋放。 同時我不想保留周期和內存泄漏。
class ObjectA {
let objectB = ObjectB()
}
class ObjectB {
}
func factoryFunc() -> ObjectB {
ObjectA().objectB
}
客戶端代碼
let objB = factoryFunc()
// but keep also ObjectA as long as objB lives
// but do not create retain cycle
// I do not want to return ObjectA and do not want to manage it outside of black box factory method.
我可以添加
class ObjectB {
var parent: ObjectA?
}
它會創建保留循環和內存泄漏
class ObjectB {
weak var parent: ObjectA?
}
這不會阻止 ObjectA 的釋放
除了創建一個強引用循環外,別無他法。 但是,如果您達到此目的,則設計中可能存在問題; 您永遠不需要創建強大的參考循環。 在你的情況下:
也許你不應該直接使用ObjectB
,而是通過ObjectA
一些設計接口。
如果您只需要專門的ObjectB
,那么您就不需要ObjectA
。
如果ObjectA
在您的應用程序中如此重要,那么您應該在該工廠之外管理它。
如果您不需要使用ObjectA
(因為您不希望它返回),並且您不會在該范圍之外管理它,那么您當然根本不需要它,並且您將能夠移動您的邏輯之外的類(或者繼承ObjA
在ObjB
)。
如果您無論如何都需要以其他隱藏方式使用它,那么您應該創建某種控制器或管理器來管理您使用類的整個流程。
此外,非常重要的是,請記住所有權只能以一種方式進行,而不能雙向進行,並且幾乎總是以與所有權相同的方式進行控制。 如果ObjectA
是的父ObjectB
,那么ObjectB
應該知道絕對沒有關於ObjectA
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.