Sobes.tech
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.