Sobes.tech
Junior — Middle

Чӣ гуна истифодаи unowned ба идоракунии муҳлати зиндагии объект дар барномасозӣ таъсир мерасонад?

sobes.tech AI

Ҷавоб аз AI

Дар iOS (Swift), калидвожа unowned истифода мешавад барои эълон кардани истиноди заиф ба объект, ки ҳисобкунаки истинодро зиёд намекунад, аммо тахмин мезанад, ки объект дар давоми умри истинод вуҷуд хоҳад дошт.

Истифодаи unowned кӯмак мекунад, ки гирдоби истинодҳо (retain cycles) пешгирӣ карда шаванд, ки метавонанд ба дарзмолшавии хотира оварда расонанд. Баръакс ба weak, истиноди unowned интихобнопазир нест ва пас аз озод кардани объект nil намешавад, бинобар ин бояд танҳо дар ҳолате истифода шавад, ки кафолат дода шавад, ки объект дарозтар аз истинод вуҷуд хоҳад дошт.

Масалан:

class Person {
    var name: String
    init(name: String) { self.name = name }
    var apartment: Apartment?
}

class Apartment {
    let unit: String
    unowned let tenant: Person
    init(unit: String, tenant: Person) {
        self.unit = unit
        self.tenant = tenant
    }
}

let john = Person(name: "John")
let apt = Apartment(unit: "4A", tenant: john)
john.apartment = apt

Дар ин ҷо, Apartment истиноди unowned ба Person нигоҳ медорад, то ки гирдоби (цикл) пешгирӣ шавад, ва тахмин мезанад, ки Person ҳамеша вуҷуд хоҳад дошт, то даме ки Apartment вуҷуд дорад. Агар Person пеш аз он нест карда шавад, дастрасӣ ба истиноди unowned дар вақти иҷрои барнома хато меорад.