Sobes.tech
Junior — Middle

Kako je u iOS implementiran automatski i ručni rad sa memorijom, i koji mehanizmi se koriste za upravljanje resursima?

sobes.tech АИ

Одговор од АИ

U iOS-u, upravljanje memorijom se uglavnom sprovodi na dva načina: automatski i ručno.

  1. Automatsko upravljanje memorijom (ARC — Automatsko brojanje referenci)

    ARC je mehanizam ugrađen u kompajler koji automatski dodaje pozive na retain/release za Objective-C i Swift objekte. Broji broj referenci na objekat i oslobađa memoriju kada broj dostigne nulu.

    Primer:

    class Person {
        var name: String
        init(name: String) {
            self.name = name
        }
    }
    
    var p1: Person? = Person(name: "Иван")
    var p2 = p1 // broj referenci se povećava
    p1 = nil // broj se smanjuje
    p2 = nil // objekat se oslobađa
    
  2. Ručno upravljanje memorijom

    U starijim verzijama iOS-a (pre ARC-a), programer je ručno pozivao metode retain, release i autorelease za upravljanje životnim ciklusom objekata.

  3. Upravljanje resursima

    Pored memorije, za upravljanje resursima (fajlovi, mrežne veze, tajmeri) koriste se obrasci poput deinit u Swift-u za oslobađanje resursa pri uništenju objekta.

    Takođe se široko koriste konstrukcije poput autoreleasepool za upravljanje privremenim objektima.

Na ovaj način, ARC značajno pojednostavljuje rad sa memorijom, smanjuje verovatnoću curenja memorije, a ručno upravljanje se retko koristi i samo u specifičnim slučajevima.