Junior — Middle
U kojim slučajevima je preporučljivo koristiti unowned umesto weak u upravljanju memorijom?
sobes.tech АИ
Одговор од АИ
U Swift-u, weak i unowned se koriste za sprečavanje cikličnih jakih referenci, ali se primenjuju u različitim situacijama:
-
weakje opcionalna referenca koja automatski postajenilkada objekat na koji se odnosi bude oslobođen. Koristi se kada referenca može postatiniltokom životnog veka objekta. -
unownedje ne-opcionalna referenca koja pretpostavlja da će objekat na koji se odnosi uvek postojati tokom korišćenja te reference. Ako objekat bude oslobođen, pristupunownedće izazvati grešku u izvršavanju.
Preporučuje se korišćenje unowned kada:
- Referenca uvek treba da ukazuje na postojeći objekat (npr. roditeljski objekat koji živi duže od deteta).
- Sigurni ste da životni vek objekta na koji se odnosi neće biti kraći od životnog veka reference.
Primer:
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)
Ovde, CreditCard ima unowned referencu na Customer, jer kartica ne može postojati bez klijenta, a klijent živi duže od kartice.