Quiero crear un objeto en el Objetivo C pero no tengo una referencia al mismo.¿Está permitido [control de liberación] controlar la duración del objeto?
¿Se puede dejar que controla el objeto de su propia vida llamando [comunicado de auto]?
En caso de que se pregunte por qué necesito esto: quiero crear un objeto que se suscriba a algunas notificaciones, pero después de un tiempo el objeto ya no se necesita y debería desaparecer.
Entonces, ¿está permitido lo siguiente?
- (void) destroyMyself {
[[NSNotificationCenter defaultCenter] removeObserver:self];
[self release];
}
Nunca he usado Cocoa, pero de lo que leo al azar en la versión web solo decremento un contador interno que el recolector de basura de tiempo de ejecución utiliza para saber cuándo recoger el objeto, por lo que esto podría permitirse, incluso si parece extraño. De nuevo, podría estar totalmente equivocado ya que es solo una suposición que hago de lo que leí hace algunas veces. – p4bl0
En un entorno de recuento de referencias, no hay recolector de basura, por lo que el objeto se libera inmediatamente cuando el recuento de referencias llega a cero. (después de la llamada a [self release], el objeto se ha eliminado y desasignado) –
Perfectamente válido. Es el comienzo de un "patrón de invalidación". Lo que probablemente también debería hacer es establecer una variable de instancia en SÍ en -init y NO en -destroyMyself. De esta forma, puede afirmar que la bandera es SÍ en otros métodos; si la respuesta es NO, usted sabe que su objeto se estaba usando después de que usted específicamente lo intentó dejar de ser válido. – bbum