Proč bychom měli uvolnit IBOutlety v metodě viewDidUnload?
sobes.tech AI
Odpověď od AI
viewDidUnload se volá po tom, co je pohled kontroléru odvolán z paměti, obvykle kvůli nedostatku zdrojů. V této metodě uvolníme (nil nebo deallocate) IBOutlet, které drží odkazy na prvky uživatelského rozhraní, aby se přerušily cykly silných odkazů a umožnilo se uvolnění paměti obsazené těmito prvky. To zabraňuje únikům paměti.
class ViewController: UIViewController {
@IBOutlet weak var myLabel: UILabel!
override func viewDidUnload() {
super.viewDidUnload()
// Uvolnit jakékoliv podzobrazení hlavního pohledu.
// např., self.myOutlet = nil;
myLabel = nil // Uvolnění IBOutlet
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// UI prvky zde mohou být znovu vytvořeny
if myLabel == nil {
// Znovu vytvořit nebo re-inicializovat štítek podle potřeby
}
}
}
Je důležité poznamenat, že od iOS 6 a novější je metoda viewDidUnload odstraněna a již není volána. Správa paměti pro pohledy je nyní automatizovaná pomocí Weak References (@IBOutlet weak) a Automatic Reference Counting (ARC). IBOutlet označené jako weak se automaticky stanou nil, když odpovídající objekt pohledu je odvolán z paměti.
Proto v moderním vývoji iOS není nutné ani efektivní explicitně uvolňovat IBOutlet v viewDidUnload.
| Verze iOS | Chování viewDidUnload |
Doporučení pro IBOutlet |
|---|---|---|
| Do iOS 6 | Volá se při odvolání pohledu z paměti. | Nastavit na nil. |
| iOS 6+ | Není voláno. | Používat weak. |