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!
Puede encontrar respuestas buscando en ...