Swift - Desinicialização

Antes que uma instância de classe precise ser desalocada, o 'desinicializador' deve ser chamado para desalocar o espaço de memória. A palavra-chave 'deinit' é usada para desalocar os espaços de memória ocupados pelos recursos do sistema. A desinicialização está disponível apenas em tipos de classe.

Desinicialização para desalocar espaço de memória

O Swift 4 desaloca automaticamente suas instâncias quando elas não são mais necessárias, para liberar recursos. O Swift 4 lida com o gerenciamento de memória de instâncias por meio de contagem automática de referência (ARC), conforme descrito em Contagem automática de referência. Normalmente, você não precisa realizar uma limpeza manual quando suas instâncias são desalocadas. No entanto, quando estiver trabalhando com seus próprios recursos, pode ser necessário realizar alguma limpeza adicional. Por exemplo, se você criar uma classe personalizada para abrir um arquivo e gravar alguns dados nele, pode ser necessário fechar o arquivo antes que a instância da classe seja desalocada.

var counter = 0; // for reference counting
class baseclass {
   init() {
      counter++;
   }
   deinit {
      counter--;
   }
}
var print: baseclass? = baseclass()

print(counter)
print = nil
print(counter)

Quando executamos o programa acima usando playground, obtemos o seguinte resultado -

1
0

Quando a instrução print = nil é omitida, os valores do contador são mantidos, pois não é desinicializado.

var counter = 0; // for reference counting

class baseclass {
   init() {
      counter++;
   }
   deinit {
      counter--;
   }
}
var print: baseclass? = baseclass()
print(counter)
print(counter)

Quando executamos o programa acima usando playground, obtemos o seguinte resultado -

1
1