Junior — Middle
Kunt u uitleggen hoe het vrijmaken van geheugen dat door een object wordt gebruikt, binnen het systeem plaatsvindt?
sobes.tech AI
Antwoord van AI
In iOS wordt het vrijmaken van geheugen van objecten voornamelijk gedaan door het ARC-mechanisme (Automatische Referentie Telling).
Elk object in het geheugen heeft een referentieteller: het aantal actieve verwijzingen ernaar. Wanneer er een verwijzing naar een object wordt gemaakt, wordt de teller verhoogd; wanneer de verwijzing wordt verwijderd, wordt deze verlaagd. Wanneer de teller nul bereikt, wordt het object automatisch uit het geheugen verwijderd.
Voorbeeld:
class Person {
var name: String
init(name: String) {
self.name = name
}
}
var person1: Person? = Person(name: "Alex") // referentieteller = 1
var person2 = person1 // referentieteller = 2
person1 = nil // referentieteller = 1
person2 = nil // referentieteller = 0, object wordt vrijgegeven
Als er cyclische verwijzingen zijn (bijvoorbeeld twee objecten die naar elkaar verwijzen), kan ARC het geheugen niet automatisch vrijmaken. Hiervoor worden zwakke (weak) of niet-eigenlijke (unowned) verwijzingen gebruikt, die de teller niet verhogen.