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!