Sobes.tech
Middle

Como é que a inicialização de classes está relacionada com a alocação de memória?

sobes.tech IA

Resposta da IA

Ao inicializar um objeto de uma classe, a memória é alocada para o seu armazenamento. Este processo inclui os seguintes passos:

  1. Cálculo do tamanho: O sistema determina a quantidade de memória necessária para armazenar todas as propriedades da instância da classe e os metadados (por exemplo, um ponteiro para a tabela de métodos virtuais).
  2. Pedido de memória: O sistema envia um pedido para alocar memória do tamanho necessário no heap.
  3. Alocação de memória: Se houver espaço livre suficiente, o heap aloca um bloco de memória e devolve um ponteiro para ele.
  4. Chamada ao inicializador (init): Após obter o ponteiro para a memória alocada, o sistema chama o inicializador correspondente da classe (init) para configurar o estado inicial das propriedades da instância. Durante a inicialização, recursos adicionais podem ser alocados ou outros objetos podem ser criados.
  5. Retorno da instância: O inicializador termina seu trabalho e o sistema devolve uma referência à instância criada e inicializada.

A memória alocada permanece ocupada até que o objeto seja liberado pelo sistema de gestão de memória (Automatic Reference Counting - ARC em iOS).

Exemplo:

class MyClass {  
    var number: Int  
    var text: String  

    init(number: Int, text: String) {  
        // Nesta fase, a memória para a instância já está alocada.  
        self.number = number // Atribuição à propriedade  
        self.text = text     // Atribuição à propriedade  
        // O inicializador termina, o objeto está pronto para uso.  
    }  
}  

// Criação de uma instância de MyClass.  
// Isto envolve a alocação de memória e a chamada a init().  
let myObject = MyClass(number: 42, text: "Hello")