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)
}
Այսպիսով՝ հիմնական նպատակն է վերահսկել ուժեղ հղումները և օգտագործել թույլ կամ առանց սեփականատիրոջ հղումներ՝ անհրաժեշտության դեպքում։