Junior — Middle
როდესაც დახურვის შიგნით ცვლადს იჭერთ, სად ინახება — სტეკში თუ ჰიპში?
sobes.tech AI
პასუხი AI-სგან
iOS-да (мисалы, Swift же Objective-Cде) жабык ичинде өзгөрмө кармалганда, өзгөрмө адатта heapте сакталат.
Бул жабык, түзүлгөн стек рамкасынан узак жашай алат дегенди билдирет. Бул өзгөрмөгө функциядан чыккан соң да жетүү үчүн, компилятор аны heapке бөлүп берет жана жабык ага шилтемени камтыйт.
Swiftте мисал:
func makeIncrementer() -> () -> Int {
var count = 0
return {
count += 1
return count
}
}
let increment = makeIncrementer()
print(increment()) // 1
print(increment()) // 2
Мында, count жабык тарабынан кармалган жана анын абалын сактоо үчүн heapте сакталат.
Ошондуктан, жабык кармаган өзгөрмөлөр алардын жашоо циклин камсыз кылуу үчүн heapке жайгаштырылат, ал стектен ашып кетет.