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