Junior
Mi az a weak memória módosító Swiftben?
sobes.tech MI
Válasz az MI-től
A weak módosító arra szolgál, hogy megszakítsa az erős hivatkozási ciklusokat objektumok között, amikor egy objektumnak erős hivatkozása van egy másikra, és ez utóbbi viszont erős hivatkozással rendelkezik vissza.
A weak fő jellemzői:
- Nem növeli a hivatkozási számlálót: A
weakhasználata nem növeli az erős hivatkozások számát az objektumon. - Lehet
nil: A gyenge hivatkozás opcionális (Optional), és automatikusannillesz, amikor az arra hivatkozott objektum deinitializálódik. - Szülő/gyermek kapcsolatokhoz használják: Gyakran alkalmazzák, amikor egy gyermekobjektumnak van hivatkozása a szülőre, hogy elkerüljék az erős hivatkozási ciklusokat.
var-ként kell deklarálni: Mivel a gyenge hivatkozásnil-vé válhat, változóként (var) kell deklarálni, nem pedig konstansként (let).
Használati példa:
class Person {
let name: String
var apartment: Apartment?
init(name: String) {
self.name = name
print("\(name) inicializálódik")
}
deinit {
print("\(name) deinitializálódik")
}
}
class Apartment {
let unit: String
weak var tenant: Person? // Gyenge hivatkozás
init(unit: String) {
self.unit = unit
print("Lakás \(unit) inicializálódik")
}
deinit {
print("Lakás \(unit) deinitializálódik")
}
}
Apartment osztályban weak var tenant: Person? nélkül erős hivatkozási ciklus alakulna ki, és a Person és Apartment példányok nem kerülnek deinitializálásra, amikor már nem mutatnak rájuk más erős hivatkozások. A weak-nek köszönhetően, amikor a Person példány deinitializálódik, a tenant hivatkozás az Apartment példányban automatikusan nil lesz.