Sobes.tech
Junior — Middle

Կարող եք նշել Swift-ով ծրագրավորումիս առաջացող հիմնական հիշողության արտահոսքի տեսակները?

sobes.tech AI

Պատասխան AI-ից

Swift-ում հիմնական հիշողության արտահոսքի տեսակները կապված են ցիկլային հղումներով (retain cycles), որոնք առաջանում են, երբ օբյեկտները պահում են միմյանց, և ARC (Automatic Reference Counting) չի կարող ազատել հիշողությունը: Հիմնական դեպքերը՝

  • Դասերի միջև ցիկլային հղումներ՝ երկու դասի օբյեկտներ ուժեղ հղումներով միմյանց:
  • Self-ը բռնող փակագծեր՝ եթե փակագիծը բռնում է self-ը առանց [weak self] կամ [unowned self] օգտագործելու, դա հանգեցնում է ցիկլի:
  • Ուժեղ հղումներ դելեգատներում՝ եթե դելեգատը հայտարարված է որպես ուժեղ հղում, և օբյեկտը դելեգատը վերադառնում է:

Օրինակ՝ փակագծով արտահոսք:

class ViewController {
    var closure: (() -> Void)?

    func setup() {
        closure = {
            print(self) // բռնում է self-ը ուժեղ հղումով
        }
    }
}

Դրա կանխարգելման համար օգտագործվում են թույլ հղումներ՝ [weak self]:

closure = { [weak self] in
    guard let self = self else { return }
    print(self)
}

Այսպիսով՝ հիմնական նպատակն է վերահսկել ուժեղ հղումները և օգտագործել թույլ կամ առանց սեփականատիրոջ հղումներ՝ անհրաժեշտության դեպքում։