Junior — Middle
Când capturați o variabilă într-o închidere, unde este stocată — în stivă sau în heap?
sobes.tech AI
Răspuns de la AI
Când o variabilă este capturată în interiorul unei închideri în iOS (de exemplu, în Swift sau Objective-C), variabila este de obicei stocată în heap.
Acest lucru se datorează faptului că o închidere poate trăi mai mult decât cadrul de stivă în care a fost creată variabila. Pentru a păstra accesul la această variabilă după ieșirea din funcție, compilatorul o alocă în heap și închidere conține o referință la ea.
Exemplu în Swift:
func makeIncrementer() -> () -> Int {
var count = 0
return {
count += 1
return count
}
}
let increment = makeIncrementer()
print(increment()) // 1
print(increment()) // 2
Aici, count este capturat de închidere și stocat în heap pentru a-și păstra starea între apeluri.
Prin urmare, variabilele capturate de închideri sunt plasate în heap pentru a asigura ciclul lor de viață, care depășește stiva.