Calling -retainCount considerado prejudicial

Or, Por que eu não useiretainCount Nas minhas férias de verão

Este post destina-se a solicitar descrições detalhadas sobre os porquês e os motivos desse infame método,retainCount, para consolidar as informações relevantes flutuando em torno de SO. *

O básico: Quais são os motivos oficiais para não usarretainCount? Existe alguma situaçãoem absolut quando pode ser útil? Em vez disso, o que deve ser feito? ** Sinta-se livre para editorializar.

Histórico / explicativo: Por que a Apple fornece esse método noNSObject protocol se não se destina a ser usado? O código da Apple depende deretainCount para algum propósito? Se sim, por que não está escondido em algum lugar?

Para uma compreensão mais profunda: Quais são as razões pelas quais um objeto pode ter uma contagem de retenção diferente do que seria assumido no código do usuário? Você pode dar exemplos *** de procedimentos padrão que o código da estrutura pode usar que causam essa diferença? Existem casos conhecidos em que a contagem de retenção ésempr diferente do que um novo usuário pode esperar?

Qualquer outra coisa que você acha que vale a pena mencionarretainCount?

* Os codificadores que são novos no Objective-C e no Cocoa geralmente lidam com, ou pelo menos entendem mal, o esquema de contagem de referências. As explicações do tutorial podem mencionar contagens de retenção, que (de acordo com essas explicações) aumentam uma vez quando você chamaretain, alloc, copy, etc., e diminua um em um quando você chamarelease (e em algum momento no futuro quando você ligar paraautorelease).

Um hacker de cacau em desenvolvimento, Kris, poderia facilmente ter a idéia de que verificar a contagem de retenção de um objeto seria útil para resolver alguns problemas de memória e, veja bem, existe um método disponível em cada objeto chamadoretainCount! Kris liga pararetainCount em alguns objetos, e este é muito alto, e esse é muito baixo, e o que diabos está acontecendo ?! Então Kris publica no SO: "O que há de errado com meu gerenciamento de memória?" e então um enxame de <bold>, <large> letras aparece dizendo "Não faça isso! Você não pode confiar nos resultados.", o que é bom e bom, mas nosso intrépido codificador pode querer uma explicação mais profund

Espero que isso se transforme em um FAQ, uma página de bons ensaios / palestras informativas de qualquer de nossos especialistas que estejam dispostos a escrever um, para que novas cabeças de cacau possam ser apontadas quando se perguntarem sobreretainCount.

** Não quero tornar isso muito amplo, mas dicas específicas da experiência ou dos documentos sobre verificação / depuração de reter e liberar pares podem ser apropriadas aqui.

*** No código fictício; obviamente, o público em geral não tem acesso ao código real da Apple.

questionAnswers(2)

yourAnswerToTheQuestion