Sobes.tech
Middle

Šta je unowned u kontekstu Swift?

sobes.tech АИ

Одговор од АИ

Unowned se odnosi na automatsko upravljanje memorijom u Swift (ARC). Unowned reference se koristi za sprečavanje ciklusa jakih referenci kada dva objekta međusobno referenciraju jedan drugog. Unowned referenca ne povećava brojač referenci objekta. Za razliku od weak reference, unowned referenca se uvek očekuje da ukazuje na postojeći primerak; ako primerak na koji ukazuje unowned referenca bude oslobođen, pokušaj pristupa će dovesti do greške u izvršavanju. Koristi se kada životni vek povezane instance odgovara ili je duži od životnog veka objekta koji sadrži unowned referencu.

Primer upotrebe:

class Department {
    var name: String
    var courses: [Course] = []

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

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

class Course {
    var name: String
    unowned var department: Department // Unowned referenca

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

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

var accounting: Department? = Department(name: "Računovodstvo")
var introToAccounting: Course? = Course(name: "Uvod u računovodstvo", department: accounting!)

accounting!.courses.append(introToAccounting!)

accounting = nil // Sada objekat Department može biti oslobođen
introToAccounting = nil // Sada objekat Course može biti oslobođen

U ovom primeru, Course ima unowned referencu na Department. Pošto Course ne može postojati bez Department (logički), i Department upravlja životnim ciklusom Course kroz niz courses, korišćenje unowned je prikladno. Ovo sprečava jak ciklus referenci između accounting i introToAccounting. Kada accounting postane nil, objekat Department se oslobađa, a zatim i objekat Course, jer na njega više nema jakih referenci.