Junior — Middle
Афзоиши шикастани хотира дар барномаҳо чӣ сабаб мешавад?
sobes.tech AI
Ҷавоб аз AI
Барои бартараф кардани сӯхтани хотира дар барномаҳо, вақте ки хотира барои объектҳо ё маълумотҳо таъин шудааст, пас аз он ки онҳо дигар зарур нестанд, озод намешавад. Дар iOS, ин аксар вақт бо:
- Даврҳои истинод байни объектҳо (даврҳои нигоҳдорӣ), махсусан ҳангоми истифодаи ARC (Ҳисоби автоматии истинод). Масалан, вақте ки ду объект ба ҳамдигар бо истинодҳои қавӣ муроҷиат мекунанд, онҳо озод намешаванд.
- Истифодаи нодуруст аз closures, ки self-ро бо истинодҳои қавӣ мегиранд.
- Нозод кардани захираҳо, ба монанди таймерҳо, мушоҳидагарон ё дескрипторҳои файл.
Масали retain cycle бо closure:
class ViewController {
var closure: (() -> Void)?
func setup() {
closure = {
print(self) // self бо қувват мегиранд, як давр месозад
}
}
}
Барои пешгирӣ кардани сӯхтани хотира, истифодаи истинодҳои заиф (weak) ё беҳуқуқ (unowned) дар closures ва таъмин кардани идоракунии дурустии ҳаёти объектҳо муҳим аст.