Sobes.tech
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 ва таъмин кардани идоракунии дурустии ҳаёти объектҳо муҳим аст.