2009-04-11 24 views
5

Por ejemplo, cuando la memoria baja, el sistema envía una notificación UIApplicationDidReceiveMemoryWarningNotification. Eso es todo lo que dice Apple en sus documentos en ese momento. Pero, ¿de dónde viene esta notificación y a qué método se envía? ¿O dónde y cómo registro lo que me notifican?¿Dónde y cómo registro un objeto para recibir una Notificación?

Respuesta

5

Se envía al centro de notificaciones, donde todas las notificaciones están centralizadas. Un objeto que desea recibir información sobre esta notificación se registra en el centro de notificaciones al indicar a qué notificación desea que se informe y qué método debe invocarse cuando se envía la notificación.

Para obtener más información, puede echar un vistazo a Notification programming topics for Cocoa y NSNotification class reference.

17

Desde dentro del código de inicialización de la clase en la que desea recibir la notificación que el método siguiente llamada:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleMemoryWarning:) name: UIApplicationDidReceiveMemoryWarningNotification object:nil]; 

Esto supone que su clase también implementa un método handleMemoryWarning de la siguiente manera:

- (void) handleMemoryWarning:(NSNotification *)notification 
{ 
} 
+4

No olvides llamar a removeObserver en el trato de esa clase. – Abizern

+0

No se puede editar. Selector debe ser @selector (handleMemoryWarning :) – DougW

+0

Olvidé usar la etiqueta de código inicialmente - Solucionado. – m4rkk

5

Mucho más simple de usar la aplicación delegar e implementar el método opcional

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application 

Las notificaciones más comunes también están disponibles traducidas en llamadas a un delegado, generalmente a métodos opcionales en un protocolo formal. Su delegado puede ser el objeto que desee.

+0

Observe cómo obtiene el nombre del delegado tomando el nombre de la notificación y eliminando 'UI' desde el principio,' Notificación' desde el final y reduciendo la primera letra. – Abizern

0

Tenga en cuenta que su selector tendrá que tomar la notificación como argumento.

Si utilizas algo como @selector (handleMemoryWarning) y - (void) handleMemoryWarning {} el objeto NO enviará la notificación y aún mantendrás toda la memoria.

Me acabo de morder.

+1

Totalmente falso (y yo también lo probé) Puede usar el selector sin params o con params. También use "hardware -> simular advertencia de memoria" en el simulador de iOS. –

+0

¿De verdad? ¿Lo has probado en todos los dispositivos y versiones del sistema operativo? Fui testigo de esto sucediendo de primera mano en mi código cuando las pruebas. –

+0

Hola Ben, no dudo que lo hayas visto en algún dispositivo y versión del sistema operativo. Dicho esto, NUNCA he visto a 'performSelector' preocuparse por un param o no. ¿Alguna idea de qué dispositivo y versión del sistema operativo era? –

Cuestiones relacionadas