Niyə viewDidUnload metodunda IBOutlet-ləri azad etməliyik?
sobes.tech Süni İntellekt
AI-dan cavab
viewDidUnload adətən idarəetməçinin görünüşü yaddaşdan çıxarıldıqdan sonra çağırılır, adətən resurs çatışmazlığı səbəbindən. Bu metodda, istifadəçi interfeys elementlərinə istinad edən IBOutlet-ləri sərbəst buraxırıq (nil və ya deallocate), güclü istinad döngələrini qırmaq və bu elementlərin tutduğu yaddaşı azad etmək üçün. Bu, yaddaş sızmalarını qarşısını alır.
class ViewController: UIViewController {
@IBOutlet weak var myLabel: UILabel!
override func viewDidUnload() {
super.viewDidUnload()
// Əsas görünüşün saxlanılan alt görünüşlərini sərbəst buraxın.
// məsələn, self.myOutlet = nil;
myLabel = nil // IBOutlet-i sərbəst buraxırıq
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// UI elementləri burada yenidən yaradılabilir
if myLabel == nil {
// Lazım gələrsə, etiketi yenidən yaradın və ya yenidən başlatın
}
}
}
Əhəmiyyətli qeyd etmək lazımdır ki, iOS 6 və daha yeni versiyalarda, viewDidUnload metodu silinmiş və artıq çağrılmır. Görünüşlər üçün yaddaş idarəetməsi indi avtomatlaşdırılıb və Weak Referanslar (@IBOutlet weak) və Automatic Reference Counting (ARC) istifadə edilərək həyata keçirilir. weak kimi işarələnmiş IBOutlet-lər, müvafiq görünüş obyekti yaddaşdan çıxarıldıqda avtomatik olaraq nil olur.
Bu səbəbdən, müasir iOS inkişafında, viewDidUnload daxilində IBOutlet-ləri açıq şəkildə sərbəst buraxmaq lazım deyil və təsirli deyil.
| iOS versiyası | viewDidUnload davranışı |
IBOutlet üçün tövsiyə |
|---|---|---|
| iOS 6-dək | Yaddaşdan görünüş çıxarılarkən çağrılır. | nil etmək. |
| iOS 6+ | Çağrılmır. | weak istifadə et. |