Sobes.tech
Junior — Middle

Zašto objekat u Swift-u ne oslobađa memoriju odmah nakon poziva destruktora?

sobes.tech АИ

Одговор од АИ

U Swift-u, objekat ne oslobađa memoriju odmah nakon poziva destruktora (deinit), jer se oslobađanje memorije upravlja sistemom automatskog brojanja referenci (ARC — Automatic Reference Counting).

deinit se poziva u trenutku kada broj referenci na objekat dostigne nulu, tj. kada više nema jakih referenci na objekat. Međutim, stvarno oslobađanje memorije može se dogoditi kasnije, jer:

  • ARC može optimizovati oslobađanje memorije.
  • Ako objekat učestvuje u cikličnim referencama, deinit možda neće biti pozvan uopšte dok se ciklusi ne prekinu.
  • U nekim slučajevima, sistem može odložiti oslobađanje memorije radi optimizacije performansi.

Dakle, deinit je signal da je objekat spreman za brisanje, ali stvarno oslobađanje memorije je zadatak ARC-a i sistema za upravljanje memorijom.