ver recuperar pantalla notificaciones historial funciona como centro borradas bloqueada iphone objective-c delegates notifications protocols

pantalla - recuperar notificaciones iphone



¿Cuál es la diferencia entre Notificaciones, Delegados y Protocolos? (2)

¿Cuál es la diferencia entre Protocols o Delegates y NSNotifications? ¿Qué es un "observador" y cómo funciona?


Protocolos

Documentación: Protocolos

Los protocolos son interfaces que definen ciertos métodos a los que responden los objetos. La clave de los protocolos es que pueden ser adoptados por cualquier clase, garantizando que un objeto responda a esos métodos.

Si declaras un protocolo:

@protocol Photosynthesis @required - (void)makeFood:(id<Light>)lightSource; @optional + (NSColor *)color; // usually green @end

Luego puede adoptarlo de otras clases que no están necesariamente relacionadas directamente:

@interface Plant : Eukaryote <Photosynthesis> // plant methods... @end @implementation Plant // now we must implement -makeFood:, and we may implement +color @end

o

@interface Cyanobacterium : Bacterium <Photosynthesis> // cyanobacterium methods... @end @implementation Cyanobacterium // now we must implement -makeFood:, and we may implement +color @end

Ahora, en cualquier otro lugar, podemos usar cualquiera de estas clases indistintamente, si solo nos preocupa la conformidad con el protocolo:

id<Photosynthesis> thing = getPhotoautotroph(); // can return any object, as long as it conforms to the Photosynthesis protocol [thing makeFood:[[Planet currentPlanet] sun]]; // this is now legal

Delegados y Notificaciones

Documentación: Patrones de diseño de cacao

Estas son dos formas de pasar mensajes entre objetos. La principal diferencia:

  • con los delegados, un objeto designado recibe un mensaje.
  • cualquier número de objetos puede recibir notificaciones cuando se publican.

Los delegados generalmente se implementan usando protocolos: una clase generalmente tendrá algo así como

@property (weak) id<MyCustomDelegate> delegate;

que le da al delegado un cierto conjunto de métodos para implementar. Puedes usar

myObject.delegate = /* some object conforming to MyCustomDelegate */;

y luego el objeto puede enviar mensajes relevantes a su delegado. Para ver un buen ejemplo común, consulte el protocolo UITableViewDelegate .

Las notificaciones, por otro lado, se implementan usando NSNotificationCenter . Un objeto (o más de un objeto) simplemente se agrega a sí mismo como un observador de notificaciones específicas, y luego puede recibirlas cuando son publicadas por otro objeto.

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notificationHappened:) name:MyCustomNotificationName object:nil];

Entonces solo implemente

- (void)notificationHappened:(NSNotification *)notification { // do work here }

Y puedes publicar notificaciones desde cualquier lugar usando

[[NSNotificationCenter defaultCenter] postNotificationName:MyCustomNotificationName object:self userInfo:nil];

Y asegúrese de llamar a removeObserver: cuando haya terminado!