Sobes.tech
Junior — Middle

Ինչպե՞ս է iOS-ում իրականացվում ավտոմատ և ձեռքով հիշողության աշխատանքը, և ինչ մեխանիզմներ են օգտագործվում ռեսուրսների կառավարման համար։

sobes.tech AI

Պատասխան AI-ից

iOS-ում հիշողության կառավարումը հիմնականում երկու հիմնական եղանակով է իրականացվում՝ ավտոմատ և ձեռքով:

  1. Ավտոմատ հիշողության կառավարում (ARC — Ավտոմատ հղումների հաշվարկ)

    ARC-ը մի մեխանիզմ է, որը ներառված է կոմպիլյատորում և ավտոմատ կերպով ավելացնում է retain/release կանչեր Objective-C և Swift օբյեկտների համար: Այն հաշվում է օբյեկտի հղումների քանակը և ազատում է հիշողությունը, երբ հաշիվը հասնում է զրոյի:

    Օրինակ՝

    class Person {
        var name: String
        init(name: String) {
            self.name = name
        }
    }
    
    var p1: Person? = Person(name: "Иван")
    var p2 = p1 // հղումների քանակը մեծանում է
    p1 = nil // քանակը նվազում է
    p2 = nil // օբյեկտը ազատվում է
    
  2. Ձեռքով հիշողության կառավարում

    Հին iOS տարբերակներում (ARC-ից առաջ), ծրագրավորողը ձեռքով կանչում էր retain, release և autorelease մեթոդները օբյեկտների կյանքի ցիկլը կառավարելու համար:

  3. Ռեսուրսների կառավարում

    Բացի հիշողությունից, ռեսուրսների (ֆայլեր, ցանցային կապեր, ժամացույցներ) կառավարումը իրականացվում է օրինակների միջոցով՝ ինչպես deinit Swift-ում՝ ռեսուրսները ազատելու համար օբյեկտի ոչնչացման ժամանակ:

    Նույնպես լայնորեն օգտագործվում են կառուցվածքներ՝ autoreleasepool՝ ժամանակավոր օբյեկտների կառավարումը հեշտացնելու համար:

Այսպիսով, ARC-ը զգալիորեն պարզեցնում է հիշողության հետ աշխատանքը, նվազեցնում է արտահոսքների հավանականությունը, իսկ ձեռքով կառավարումը հազվադեպ է կիրառվում և միայն հատուկ դեպքերում։