Junior — Middle
Vai vari uzskaitīt galvenos atmiņas noplūdes veidus, kas var rasties, programmējot Swift?
sobes.tech AI
Atbilde no AI
Swift valodā galvenie atmiņas noplūdes veidi ir saistīti ar cikliskām atsaucēm (retain cycles), kas rodas, kad objekti viens otru tur, un ARC (Automatic Reference Counting) nevar atbrīvot atmiņu. Galvenie gadījumi:
- Cikliski saistījumi starp klasēm: divi klases objekti ar stiprām atsaucēm viens uz otru.
- Aizvēršanas, kas uztver self: ja aizvēršana uztver self bez
[weak self]vai[unowned self], tas noved pie cikla. - Stipras atsauces delegātos: ja delegāts ir deklarēts kā stipra atsauce, un objekts delegāts atsaucas atpakaļ.
Piemērs ar aizvēršanu un noplūdi:
class ViewController {
var closure: (() -> Void)?
func setup() {
closure = {
print(self) // uztver self ar stipru atsauci
}
}
}
Lai izvairītos, tiek izmantotas vājās atsauces:
closure = { [weak self] in
guard let self = self else { return }
print(self)
}
Galvenais ir kontrolēt stipras atsauces un izmantot vājas vai bez īpašnieka atsauces tur, kur tas ir nepieciešams.