Sobes.tech
Junior

Šta je weak modifikator memorije u Swift-u?

sobes.tech АИ

Одговор од АИ

Modifikator weak se koristi za prekidanje ciklusa jakih referenci između objekata, kada jedan objekat ima jaku referencu na drugi, a taj objekat zauzvrat ima jaku referencu nazad.

Glavne karakteristike weak:

  • Ne povećava brojač referenci: Korišćenje weak ne povećava broj jakih referenci na objekat.
  • Može biti nil: Slaba referenca je opcionalna (Optional) i automatski postaje nil kada objekat na koji se odnosi bude deinitializovan.
  • Koristi se za roditelj/dete odnose: Često se primenjuje kada dete objekat ima referencu na svog roditelja, da bi se izbegli ciklusi jakih referenci.
  • Mora biti deklarisana kao var: Pošto slaba referenca može postati nil, mora biti promenljiva (var), a ne konstanta (let).

Primer upotrebe:

class Person {
    let name: String
    var apartment: Apartment?

    init(name: String) {
        self.name = name
        print("\(name) se inicijalizuje")
    }

    deinit {
        print("\(name) se deinitializuje")
    }
}

class Apartment {
    let unit: String
    weak var tenant: Person? // Slaba referenca

    init(unit: String) {
        self.unit = unit
        print("Stan \(unit) se inicijalizuje")
    }

    deinit {
        print("Stan \(unit) se deinitializuje")
    }
}

Bez weak var tenant: Person? u klasi Apartment, došlo bi do ciklusa jakih referenci, i instance Person i Apartment ne bi bile deinitializovane kada više ne budu imale druge jake reference. Zahvaljujući weak, kada se instanca Person deinitializuje, referenca tenant u instanci Apartment automatski postaje nil.