2010-10-18 21 views
23

Los dioses se han lanzado en paracaídas muchos hábitos en mi pueblo de la selva aisladas, tales como:NSNotificationCenter: ¿Por qué molestarse en llamar a removeObserver?

- (void) dealloc { 

    [[NSNotificationCenter defaultCenter] removeObserver:self]; 
    [super dealloc]; 

} 

Sus formas son extrañas para mí, sin embargo, todavía tratar de entenderlos.

¿Por qué molestarse en limpiar los cabos sueltos si la instancia se va? ¿No se disminuirá la referencia/retención de conteo de esa instancia? ¿Abarrotara algún tipo de Notification Hash Table al acecho que contenga una lista de todos los oyentes?

Respuesta

37

NSNotificationCenter no conservan observadores. Si no quita el observador, y el observador es desasignado, entonces NSNotificationCenter queda con un puntero colgando que (la mayoría de las veces) se bloqueará cuando intente notificar al observador.

8

Aunque en la práctica muchos de tus hijos no iniciados saldrán sin seguir los ritos, porque ha complacido a St. Jobs otorgar un hechizo removeObserver en muchas de tus súper clases. Tal como UINavigationController. Aunque esto no se encuentra en ninguno de los Escritos, he encontrado que esto es cierto.

Cuestiones relacionadas