Neden viewDidUnload metodunda IBOutlet'ları serbest bırakmalıyız?
sobes.tech yapay zeka
AI'dan gelen yanıt
viewDidUnload metodu, genellikle kaynak eksikliği nedeniyle kontrolörün görünümünün bellekteki yerinin boşaltılmasından sonra çağrılır. Bu yöntemde, kullanıcı arayüzü öğelerine referans tutan IBOutlet'leri serbest bırakırız (nil veya deallocate) böylece güçlü referans döngülerini kırar ve bu öğelerin kapladığı belleğin serbest bırakılmasını sağlar. Bu, bellek sızıntılarını önler.
class ViewController: UIViewController {
@IBOutlet weak var myLabel: UILabel!
override func viewDidUnload() {
super.viewDidUnload()
// Ana görünümün tutulan alt görünümlerini serbest bırak.
// örn., self.myOutlet = nil;
myLabel = nil // IBOutlet'i serbest bırakıyoruz
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// UI öğeleri burada yeniden oluşturulabilir
if myLabel == nil {
// Gerekirse etiketi yeniden oluştur veya yeniden başlat
}
}
}
Önemli not: iOS 6 ve sonrası sürümlerde viewDidUnload metodu kaldırılmış ve artık çağrılmamaktadır. Görünümler için bellek yönetimi artık otomatik olarak Weak Referanslar (@IBOutlet weak) ve Otomatik Referans Sayımı (ARC) kullanılarak yapılmaktadır. weak olarak işaretlenmiş IBOutlet'ler, ilgili görünüm nesnesi bellekte boşaltıldığında otomatik olarak nil olur.
Bu nedenle, modern iOS geliştirmede, viewDidUnload içinde IBOutlet'leri açıkça serbest bırakmak gerekmez ve etkili değildir.
| iOS Sürümü | viewDidUnload davranışı |
IBOutlet için öneri |
|---|---|---|
| iOS 6 öncesi | Bellekten görünüm boşaltıldığında çağrılır. | nil yapın. |
| iOS 6 ve sonrası | Çağrılmaz. | weak kullanın. |