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.