Junior — Middle
Mi okozza a memória szivárgásokat az alkalmazásokban?
sobes.tech MI
Válasz az MI-től
Az alkalmazásokban a memória szivárgások akkor fordulnak elő, amikor a objektumok vagy adatok számára lefoglalt memória nem szabadul fel, miután már nincs rájuk szükség. iOS-en ez gyakran összefügg:
- Objektumok közötti ciklikus referenciákkal (retain cycle-ek), különösen ARC (Automatikus Referencia Számolás) használata esetén. Például, amikor két objektum erős referenciákkal hivatkozik egymásra, nem szabadulnak fel.
- A closure-k helytelen használatával, amelyek self-t erős referenciával ragadnak meg.
- Erőforrások, például időzítők, megfigyelők vagy fájldeskriptorok nem felszabadításával.
Példa retain cycle-re closure-rel:
class ViewController {
var closure: (() -> Void)?
func setup() {
closure = {
print(self) // self erősen meg van ragadva, ciklust hozva létre
}
}
}
A szivárgások elkerülése érdekében, gyenge (weak) vagy nem tulajdonolt (unowned) referenciákat használnak closure-kben, és biztosítják az objektumok életciklusának helyes kezelését.