Sobes.tech
Junior — Middle

Kādās situācijās ir vēlams izmantot unowned vietā weak atmiņas pārvaldībā?

sobes.tech AI

Atbilde no AI

Swift valodā weak un unowned tiek izmantoti, lai novērstu stipro atsauces ciklu, bet tie tiek piemēroti dažādās situācijās:

  • weak ir opcija, kas automātiski kļūst par nil, kad atsauce uz objektu tiek atbrīvota. To izmanto, ja atsauce var kļūt par nil objekta dzīves laikā.

  • unowned ir ne-opcionāla atsauce, kas pieņem, ka objekts, uz kuru tā attiecas, vienmēr pastāvēs šīs atsauces izmantošanas laikā. Ja objekts tiek atbrīvots, piekļuve unowned radīs izpildes kļūdu.

Ieteicams izmantot unowned, kad:

  • Atsauce vienmēr jānorāda uz esošu objektu (piemēram, vecāka objekts, kas dzīvo ilgāk nekā bērns).
  • Esat pārliecināts, ka objekta dzīves ilgums nebūs īsāks par atsauces dzīves ilgumu.

Piemērs:

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)

Šeit, CreditCard ir ar unowned atsauci uz Customer, jo karte nevar pastāvēt bez klienta, un klients dzīvo ilgāk nekā karte.