Ինչու ենք պետք ազատել IBOutlet-ները viewDidUnload մեթոդում?
sobes.tech AI
Պատասխան AI-ից
viewDidUnload կոչվում է այն ժամանակ, երբ տեսքը վերահսկողից դուրս է բերվում հիշողությունից, սովորաբար ռեսուրսների պակասի պատճառով: Այս մեթոդում մենք ազատում ենք (nil կամ deallocate) IBOutlet-ները, որոնք պահում են հղումներ օգտագործողի ինտերֆեյսի տարրերին, որպեսզի խզենք ուժեղ հղումների ցիկլերը և թույլ տանք այդ տարրերի զբաղեցրած հիշողությունը ազատել: Սա կանխում է հիշողության լիքերը:
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 ծրագրավորման մեջ, բացահայտ ազատել IBOutlet-ները viewDidUnload-ում անհրաժեշտ չէ և դա արդյունավետ չէ:
| iOS տարբերակ | viewDidUnload վարքագիծ |
Խորհուրդ՝ IBOutlet-ների համար |
|---|---|---|
| Առաջ iOS 6 | Կոչվում է տեսքի դուրս բերման ժամանակ | nil-ին դնել։ |
| iOS 6+ | Չի կոչվում | weak օգտագործել։ |