Ad esempio, quando la memoria si sta esaurendo, il sistema invia una notifica UIApplicationDidReceiveMemoryWarningNotification
. Questo è tutto ciò che Apple dice nei suoi documenti a quel punto. Ma da dove viene questa notifica e a quale metodo viene inviata? O dove e come registro ciò che viene notificato?Dove e come registrare un oggetto per ricevere una notifica?
risposta
Viene inviato al centro di notifica, dove tutte le notifiche sono centralizzate. Un oggetto che vuole essere informato su questa notifica si registra al centro di notifica indicando quale notifica vuole essere informata e quale metodo deve essere invocato quando viene sollevata la notifica.
Per ulteriori informazioni è possibile dare un'occhiata a Notification programming topics for Cocoa e NSNotification class reference.
Da all'interno del codice di inizializzazione della classe che si desidera ricevere la notifica rendere il metodo seguente chiamata:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleMemoryWarning:) name: UIApplicationDidReceiveMemoryWarningNotification object:nil];
Questo presuppone che la classe implementa anche un metodo handleMemoryWarning come segue:
- (void) handleMemoryWarning:(NSNotification *)notification
{
}
Molto più semplice usare l'applicazione delegare e implementare il metodo opzionale
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
Le notifiche più comuni sono anche disponibili tradotte in chiamate a un delegato, in genere a metodi facoltativi in un protocollo formale. Il tuo delegato può essere qualsiasi oggetto tu voglia.
Si noti come si ottiene il nome del delegato prendendo il nome della notifica e rimuovendo l'interfaccia utente dal principio, "Notifica" dalla fine e downcasing della prima lettera. – Abizern
Stai attento che il tuo selettore dovrà prendere la notifica come argomento.
Se si utilizza qualcosa come @selector (handleMemoryWarning) e - (void) handleMemoryWarning {} l'oggetto NON invierà la notifica e manterrà ancora tutta la memoria.
Sono stato appena morso da questo.
Totalmente non vero (e l'ho appena provato anche io). Puoi usare il selettore senza parametri o con parametri. Usa anche "hardware -> simula avviso di memoria" nel simulatore iOS. –
Davvero? Lo hai testato su tutti i dispositivi e le versioni del sistema operativo? Ho assistito a questo accadendo di prima mano nel mio codice durante i test. –
Ciao Ben, non dubito che l'hai visto su qualche dispositivo e versione del sistema operativo. Detto questo, non ho mai visto 'performSelector' preoccuparsi di un param o meno. Qualche idea su quale dispositivo e versione del sistema operativo fosse? –
- 1. Come ricevere una notifica quando viene notificata una notifica
- 2. Posso ricevere una notifica quando inizia un nuovo giorno?
- 3. ricevere una notifica quando UITextField diventaFirstResponder
- 4. Come ricevere una notifica al termine di una build completata?
- 5. È possibile registrare un'applicazione Web per ricevere notifiche dall'hub di notifica blu
- 6. Come ricevere notifica di spostamento UITableViewCell inizio e fine
- 7. Come ricevere una notifica quando l'applicazione viene chiusa in Android
- 8. Come posso ricevere una notifica di un cambio orario del sistema nella mia applicazione Cocoa?
- 9. Come ricevere un oggetto JSON con rack
- 10. C'è un modo nel debugger di Eclipse per ricevere una notifica quando lo stato di un oggetto Java cambia?
- 11. Come registrare un oggetto traduttore Pylons?
- 12. Come ricevere una notifica quando un utente cambia password o richiede una reimpostazione della password?
- 13. RxJava Osservabile ricevere una notifica sulla prima emissione
- 14. È possibile ricevere una notifica quando UITableView termina lo scorrimento?
- 15. Alternativa all'autorizzazione READ_PHONE_STATE per ricevere notifica della chiamata
- 16. C'è un modo per ricevere una notifica quando la mia proprietà UIImageView.image cambia?
- 17. Come ricevere NSUserDefaultsDidChangeNotification iphone
- 18. Come ricevere la notifica a contatto evento modificato in IOS?
- 19. Come posso ricevere una notifica degli errori durante il piping per ingurgitare browserify?
- 20. Come inviare e ricevere oggetto serializzato nel canale socket
- 21. Come ricevere una notifica quando è terminata una transizione tra le attività?
- 22. Come ricevere una notifica quando lo stato di SMS cambia da "In coda" a "Inviato"?
- 23. Come posso ricevere una notifica quando viene creata una nuova finestra su Win32?
- 24. Come posso registrare un elemento HTML come oggetto JavaScript?
- 25. Come ricevere una notifica quando una finestra viene messa a fuoco in WPF?
- 26. Silverlight: come ricevere la notifica di una modifica in una DependencyProperty ereditata
- 27. Notifica Un oggetto quando una proprietà di un altro oggetto cambia
- 28. Android: utilizzando registerContentObserver() per ricevere una notifica man mano che i contatti vengono modificati
- 29. Come ricevere una notifica quando la finestra si chiude nell'estensione di Firefox?
- 30. Come ricevere e-mail nell'applicazione Java EE
Non dimenticare di chiamare removeObserver nel dealloc di quella classe. – Abizern
Impossibile modificare. Il selettore dovrebbe essere @selector (handleMemoryWarning :) – DougW
Ho dimenticato di utilizzare inizialmente il tag del codice: risolto. – m4rkk