unowned self e weak self são conceitos usados em Swift para gerenciar a captura de self (referência ao próprio objeto) em closures, principalmente para evitar ciclos de referência fortes (strong reference cycles) que podem causar vazamentos de memória. Eles são semelhantes, mas têm diferenças importantes em seu comportamento e uso:
- weak self:
- Uma referência
weaknão mantém uma contagem forte para o objeto que ela referencia. Isso significa que o objeto pode ser desalocado mesmo que a referênciaweakainda exista. - Em Swift, uma referência
weaké sempre declarada como uma variável opcional (?). Se o objeto ao qual ela se refere for desalocado, a referênciaweakautomaticamente se tornanil. Isso é útil para evitar o uso acidental de um objeto que já foi desalocado. - Usar
weak selfem uma closure garante que, se o objeto referenciado (self) for desalocado, a closure não o manterá vivo. Oselfdentro da closure se tornaránilnesse caso.
- Uma referência