რატომ უნდა გავათავისუფლოთ IBOutlet-ები viewDidUnload მეთოდში?
sobes.tech AI
პასუხი AI-სგან
viewDidUnload контроллерის ხედვა жүктөлгөндөн кийин, адатта ресурстардын жетишсиздигинен улам чакырылат. Бул методдо биз UI элементтерине шилтемелерди сактаган IBOutlet'тарды бошотобуз (nil же deallocate), күчтүү шилтемелер циклин үзүү жана бул элементтердин эс тутумда болушун алдын алуу үчүн. Бул эс тутумду агып кетүүнүн алдын алат.
class ViewController: UIViewController {
@IBOutlet weak var myLabel: UILabel!
override func viewDidUnload() {
super.viewDidUnload()
// Башка сакталган көзөмөлдөрдү бошотуу.
// мисалы, self.myOutlet = nil;
myLabel = nil // IBOutlet бошотуу
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// UI элементтерин кайра түзүү мүмкүн
if myLabel == nil {
// Эгер керек болсо, кайра түзүү же кайра инициализациялоо
}
}
}
Маанилүү: iOS 6 жана андан кийинки версияларда viewDidUnload методу жокко чыгарылган жана ал дагы чакырылбайт. Эс тутумду башкаруу автоматташтырылган, Weak References (@IBOutlet weak) жана Automatic Reference Counting (ARC) колдонуу менен. weak деп белгиленген IBOutlet'тар, тиешелүү көрүнүш объектиси эс тутумдан чыгарылганда автоматтык түрдө nil болот.
Ошондуктан, азыркы iOS өнүктүрүүдө viewDidUnload ичинде IBOutlet'тарды атайын бошотуу талап кылынбайт жана натыйжа бербейт.