Sobes.tech
Junior — Middle

Come avviene la distribuzione e il rilascio della memoria per i tipi di dati di riferimento?

sobes.tech AI

Risposta dell'AI

In iOS, per i tipi di riferimento (ad esempio, le classi), la memoria viene allocata dinamicamente nell'heap. Quando si crea un oggetto di classe, il sistema gli assegna memoria nell'heap e restituisce un riferimento a quell'oggetto.

La liberazione della memoria avviene tramite il conteggio automatico delle referenze (ARC — Automatic Reference Counting). Ogni oggetto mantiene un contatore di riferimenti — il numero di riferimenti attivi ad esso. Quando viene creata una nuova referenza, il contatore aumenta, e quando la referenza viene eliminata o diventa nil, diminuisce. Quando il contatore raggiunge zero, l'oggetto viene automaticamente rimosso dalla memoria.

Esempio:

class Person {
    var name: String
    init(name: String) {
        self.name = name
    }
}

var person1: Person? = Person(name: "Иван") // contatore di riferimenti = 1
var person2 = person1 // contatore di riferimenti = 2
person1 = nil // contatore di riferimenti = 1
person2 = nil // contatore di riferimenti = 0, l'oggetto Person viene rimosso dalla memoria

In questo modo, lo sviluppatore non deve liberare manualmente la memoria — l'ARC gestisce tutto automaticamente.