Junior — Middle
Miks programmeerimises kasutatakse nõrku ja tugevat viidet ning kuidas nad erinevad?
sobes.tech AI
Vastus AI-lt
Programmeerimises, eriti mälu haldamisel, kasutatakse tugevaid (strong) ja nõrku (weak) viiteid objektide elutsükli kontrollimiseks ja mälulekke vältimiseks.
- Tugev viide hoiab objekti mälus seni, kuni vähemalt üks tugev viide on olemas. Prügikoristaja seda ei eemalda.
- Nõrk viide ei takista objekti eemaldamist. Kui alles jäävad ainult nõrgad viited, võib see vabastada mälust.
See on oluline tsükliliste viidete vältimiseks, kui kaks objekti viitavad üksteisele tugevate viidetega ning prügikoristaja ei saa neid eemaldada. Sellistel juhtudel muudetakse üks viidetest nõrgaks.
Swift näide:
class Person {
var name: String
weak var apartment: Apartment? // nõrk viide
init(name: String) {
self.name = name
}
}
class Apartment {
var unit: String
var tenant: Person? // tugev viide
init(unit: String) {
self.unit = unit
}
}
let john = Person(name: "John")
let apt = Apartment(unit: "4A")
john.apartment = apt
apt.tenant = john
Siin on apartment nõrk viide, et vältida tsüklilist mäluhoidmist Person ja Apartment vahel.