Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

View deve ser weak var ou não?

Diz ser a opção correta a Letra A que diz: `Implementar na classe MoviesPresenter:

weak var view: MoviesViewProtocol?`

mas na justificativa da letra C não ser correta, dizem que "Apesar de usar um protocolo, a referência não deve ser weak, pois view é uma propriedade que deve ser mantida forte enquanto o Presenter está ativo para evitar que seja desalocada prematuramente." Mas então a referência deve ser weak ou não?

2 respostas
solução!

Olá, Bruna! Entendo sua confusão e vou tentar esclarecer essa questão para você.

A resposta correta é realmente a letra B, que sugere implementar na classe MoviesPresenter a linha weak var view: MoviesViewProtocol?. Isso porque, ao utilizar um protocolo, você diminui o acoplamento e aumenta a flexibilidade do código, o que é uma prática recomendada.

A questão da referência ser weak ou não, na verdade, depende do ciclo de vida dos objetos envolvidos. No padrão MVP, geralmente, a View possui uma referência forte para o Presenter, e o Presenter possui uma referência fraca (weak) para a View. Isso é feito para evitar um ciclo de referência forte, que poderia causar um vazamento de memória.

Quando a referência é weak, o objeto não é mantido na memória se não houver outras referências fortes para ele. Portanto, se a View for desalocada por algum motivo, a referência weak no Presenter para a View será automaticamente definida como nil, evitando assim que o Presenter tente acessar uma View que não existe mais.

No entanto, a justificativa da opção C parece ter um erro, pois contradiz a resposta correta. A referência para a View no Presenter deve ser weak para evitar ciclos de referência forte e possíveis vazamentos de memória.

Aqui está um exemplo de como você poderia implementar isso:

protocol MoviesViewProtocol: AnyObject {
    // Métodos necessários para a comunicação com a View
}

class MoviesPresenter {
    weak var view: MoviesViewProtocol?
    // Restante do código do Presenter
}

Espero ter ajudado. Eu vou passar para a equipe de conteúdo, para eles analisarem e corrigirem posteriormente. Muito obrigado pelo feedback e sugestão. Bons estudos!

Obrigada pela explicação! Entendi melhor agora :)