¿Hay algún caso en el que sea válido?

Leyendo el código fuente de mi proyecto actual, veo:

[self retain] 

en una class, en su método init .

No entiendo exactamente la razón. Leyendo las reglas de administración de memory de Apple, no veo nada al respecto, y no veo ningún hipotético [self release] .

El object afirma la propiedad de sí mismo cuando se inicializa. La única razón por la que puedo ver que esto podría ser útil es si el object necesita garantizar su propia existencia hasta que haya sucedido algún evento. Por ejemplo, podría ejecutar un timer y luego liberarse cuando el timer caduque.

Si no está documentado y no hay una versión correspondiente, probablemente sea un error.

La mejor suposition es que la persona que escribió el código tenía un error de retención y se trataba de una "solución rápida" en torno al problema real.

Esto parece ser probablemente un error, por lo general no depende de que el object se retenga.

Solo veo un caso especial: delegar y notificar, donde hay que tener mucho más cuidado con su ciclo de vida, pero incluso en este caso, la liberación / retención no debería hacerse en el object mismo.

Nota para Erick:

En el caso de UIAlert, puede lanzarlo antes de que se haya destruido porque la vista ha estado pero en la vista hiercarchy, y luego se hace reference. Por lo tanto, la vista se destruirá automáticamente cuando se elimine de la jerarquía de vistas.

No está mal retener self . Pero verlo en un método init suena sospechoso. No puedo pensar en un buen ejemplo de dónde sería algo bueno hacer. Además, aunque con ARC, ni siquiera puedes hacerlo, así que tendrás que pensar en una mejor manera de hacer las cosas. En general, si se requiere un object para estar vivo, entonces habría otro object que se aferra a él. Los objects de retención automática son propensos a errores en los que nunca se liberarán.

Si recuerdo correctamente algunas classs, use la autoconservación para evitar la liberación prematura. Diría que no es exactamente la mejor práctica, pero si conoce las reglas del juego (en este caso Obj-C) puede romperlas (a veces).

si tienes algún object, es como si tuviera salud / vida. cuando lo creaste, tiene uno en vivo. y. function 'retener' aumentando su número de vidas +1, function de liberación disminuyendo su número de vidas -1, descomprimir también disminuyendo, asignar boost