Junior — Middle
El tudná magyarázni, hogyan történik a memória felszabadítása, amelyet egy objektum foglal el a rendszerben?
sobes.tech MI
Válasz az MI-től
Az iOS-ben az objektumok memória felszabadítása elsősorban az ARC (Automatikus Hivatkozásszámlálás) mechanizmusával történik.
Minden objektumnak a memóriában van egy hivatkozásszámlálója: az aktív hivatkozások száma rá. Amikor létrejön egy hivatkozás egy objektumra, a számláló növekszik; amikor a hivatkozás törlésre kerül, csökken. Amikor a számláló eléri a nullát, az objektum automatikusan felszabadul a memóriából.
Példa:
class Person {
var name: String
init(name: String) {
self.name = name
}
}
var person1: Person? = Person(name: "Alex") // hivatkozásszám = 1
var person2 = person1 // hivatkozásszám = 2
person1 = nil // hivatkozásszám = 1
person2 = nil // hivatkozásszám = 0, az objektum felszabadul
Ha ciklikus hivatkozások (pl. két objektum, amelyek egymásra hivatkoznak) vannak, az ARC nem tudja automatikusan felszabadítani a memóriát. Ennek megoldására gyenge (weak) vagy nem tulajdonolt (unowned) hivatkozásokat használnak, amelyek nem növelik a számlálót.