Sobes.tech
Junior — Middle

Дар кадом ҳолатҳо истифодаи unowned дар ҷойи weak дар идоракунии хотира беҳтар аст?

sobes.tech AI

Ҷавоб аз AI

Дар Swift, weak ва unowned истифода мешаванд, то гардиши ишораҳои қавӣ пешгирӣ карда шаванд, аммо дар ҳолатҳои гуногун татбиқ мешаванд:

  • weak ишораи имконотӣ аст, ки худ ба худ nil мешавад, вақте ки объекте, ки ба он ишора мекунад, озод мешавад. Он дар ҳолатҳое истифода мешавад, ки ишора дар давоми ҳаёти объект метавонад nil шавад.

  • unowned ишораи ғайри-имконот аст, ки тахмин мезанад, ки объекте, ки ба он ишора мекунад, ҳамеша дар вақти истифодаи ин ишора вуҷуд хоҳад дошт. Агар объект озод шавад, дастрасӣ ба unowned дар вақти иҷро хато хоҳад овард.

Интихоб кардан барои истифодаи unowned вақте беҳтар аст, ки:

  • Ишора ҳамеша бояд ба объекте, ки вуҷуд дорад, ишора кунад (масалан, объекте, ки калонтар аст ва аз кӯдак дарозтар зиндагӣ мекунад).
  • Шумо боварӣ доред, ки давомнокии ҳаёти объекте, ки ба он ишора мекунед, кӯтоҳтар аз давомнокии ишора нахоҳад буд.

Масалан:

class Customer {
    let name: String
    var card: CreditCard?
    init(name: String) {
        self.name = name
    }
}

class CreditCard {
    let number: UInt64
    unowned let customer: Customer
    init(number: UInt64, customer: Customer) {
        self.number = number
        self.customer = customer
    }
}

let john = Customer(name: "John Appleseed")
john.card = CreditCard(number: 1234_5678_9012_3456, customer: john)

Ин ҷо, CreditCard дорои ишораи unowned ба Customer аст, зеро корт наметавонад бе мизоҷ вуҷуд дошта бошад, ва мизоҷ дарозтар аз корт зиндагӣ мекунад.