Sobes.tech
Middle

Ինչու ենք պետք ազատել 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 օգտագործել։