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 Customerка unowned шилтемеге ээ, анткени карта кардарсыз болбойт, жана кардар картага караганда узак жашайт.