Өзүнүн чектөөсүнөн чыгууга мүмкүндүк берген жана мүмкүн эмес болгон жабдыктар арасындагы негизги айырманы түшүндүрүңүз.
sobes.tech AI
AIден жооп
iOS (Swift/Objective-C) ичинде, жабуулар (closures) сырткы чөйрөдөн өзгөрмөлөрдү кармап кала алат. Алардын негизги айырмасы — алардын өз чөйрөсүнөн чыгышы мүмкүн же мүмкүн эместиги, жашоо мөөнөтү жана контекстти кармоо менен байланыштуу:
-
Чыгышы мүмкүн болгон жабуулар — бул объекттер, сырткы контексттен өзгөрмөлөргө шилтемелерди кармап, аларды сактап калат, ошондуктан бул өзгөрмөлөрдү оригиналдуу чөйрө аяктагандан кийин да колдонсо болот. Бул жабуулар көбүнчө мүнөздөмөлөрдө сакталат, callback катары өткөрүлөт жана башка.
-
Чыгышы мүмкүн эмес жабуулар — бул сакталбаган же контекстти кармаган эмес, же ошол эле чөйрөдө гана колдонулган жабуулар. Алар кийинчерээк чакырылбайт, анткени контекст алгачкы эле жок кылынган.
Мисал:
func makeIncrementer(amount: Int) -> () -> Int {
var total = 0
let incrementer: () -> Int = {
total += amount
return total
}
return incrementer
}
let inc = makeIncrementer(amount: 5)
print(inc()) // 5
print(inc()) // 10
Бул жерде, incrementer жабуусу total жана amount өзгөрмөлөрүн кармап, аларды сактап калат, ошондуктан аларды оригиналдуу функциядан тышкары колдонсо болот. Эгер ал контекстти кармабаса же сакталбаса, ал иштебейт эле.