Sobes.tech
Junior — Middle

Kuidas iOS-s on rakendatud automaatne ja käsitsi mälu haldus ning milliseid mehhanisme kasutatakse resursi haldamiseks?

sobes.tech AI

Vastus AI-lt

iOS-is mäluhaldus põhineb peamiselt kahel peamisel viisil: automaatsel ja käsitsi.

  1. Automaatne mäluhaldus (ARC — Automaatne viidete arv)

    ARC on mehhanism, mis on sisseehitatud kompilaatorisse ja lisab automaatselt retain/release kõned Objective-C ja Swift objektidele. See arvutab objekti viidete arvu ja vabastab mälu, kui arv on null.

    Näide:

    class Person {
        var name: String
        init(name: String) {
            self.name = name
        }
    }
    
    var p1: Person? = Person(name: "Иван")
    var p2 = p1 // viidete arv suureneb
    p1 = nil // arv väheneb
    p2 = nil // objekt vabastatakse
    
  2. Käsitsi mäluhaldus

    Vanemates iOS versioonides (enne ARC-d) kutsus arendaja käsitsi välja meetodid retain, release ja autorelease, et hallata objektide elutsüklit.

  3. Resursside haldamine

    Lisaks mälule kasutatakse ressursside (failid, võrguliidesed, ajastajad) haldamiseks mudeleid nagu deinit Swiftis, mis vabastab ressursid objekti hävitamisel.

    Samuti kasutatakse laialdaselt konstruktsioone nagu autoreleasepool, et hallata ajutisi objekte.

Seega lihtsustab ARC märkimisväärselt mälu haldamist, vähendab lekkimise tõenäosust ning käsitsi haldamine kasutatakse harva ja ainult spetsiifilistes olukordades.