[英]Would it cause retain cycle that add a subview on a view passed by parameter of a function?
例如:
// CustomViewClass
- (void)showOnView: (UIView*)view {
[view addSubview: self.customView];
}
然后在另一個類中調用此方法,如視圖控制器的viewDidLoad
。
- (void)viewDidLoad {
[super viewDidLoad];
[self.customViewClass showOnView: self.view];
}
我將視圖控制器的視圖傳遞給CustomViewClass
,如上所述。
我的問題是:它會導致某種保留周期嗎?
這些視圖是通過弱參數引用的嗎?
或者它很好。
如果有人在Swift和Objective-C中解釋它,將非常感激。
什么是保留周期? - 這是兩個對象保持彼此引用並被保留的條件,它創建了一個保留周期,因為兩個對象都試圖相互保留,從而無法釋放。
在這種情況下, self.customViewClass
保持對它的引用self.view
但self.view
不保留對任何參考self.customViewClass
。 其中引用self.customViewClass
是self
,而不是self.view
。
所以當然, 它不會導致保留周期
不相信我? 🤣 - 通過嘗試在dealloc
方法中記錄某些內容來自行檢查。
解雇CustomViewController
,如果調用dealloc
的代碼並記錄某些內容,則表示此處沒有保留周期。 如果不是,則導致保留周期。
例如
- (void)dealloc {
NSLog(@"BOOM RIGHT ANSWER!!!");
}
當兩個類具有指向彼此的對象時發生內存泄漏。例如
class A{
var object_b = B()
}
class B{
var object_a = A()
}
現在考慮你的情況:// CustomViewClass
- (void)showOnView: (UIView*)view {
[view addSubview: self.customView];
}
你的“view”對象是局部變量.CustomViewClass doest不引用superview“view”。
現在,當customview添加到superview時:
- (void)viewDidLoad {
[super viewDidLoad];
[self.customViewClass showOnView: self.view];
}
當CustomViewClass的showOnView函數調用superview時,只需添加子視圖CustomViewClass視圖。
要查找內存泄漏,請始終在視圖和viewController類中添加deinit函數,以便可以確定是否已取消分配類。
deinit {
print("deinit called " + "Class name")
}
這不會導致保留周期。 它是對象的單向引用,其中父視圖在輔助(自定義)視圖中具有引用。 但是,父視圖中沒有該輔助視圖的引用。 因此,除非出現這種情況,否則就保留周期而言,您是非常安全的,並且不需要父視圖的弱引用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.