8

Tengo problemas para entender el concepto de cómo el iPhone se ocupa de los eventos. ¡Ayuda! Los delegados también me confunden. ¿Le importaría a alguien explicar, por favor?terminología del objetivo C: puntos de venta y delegados

+2

tratando de ser un imbécil pero ¿ha leído los documentos introductorios en developer.apple.com? Es solo que la pregunta tomaría un ensayo para responder. Tal vez formule una pregunta más detallada sobre lo que le está colgando. –

+0

La documentación que Apple proporciona en la Guía de conceptos básicos de Cocoa en los puntos de venta: http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/CocoaFundamentals/CommunicatingWithObjects/CommunicateWithObjects.html#//apple_ref/doc/uid/ TP40002974-CH7-SW3 y delegados: http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/CocoaFundamentals/CommunicatingWithObjects/CommunicateWithObjects.html#//apple_ref/doc/uid/TP40002974-CH7-SW18 parece bastante completo para mí. –

+0

@Brad - No soy una persona de documentación. – Moshe

Respuesta

19

Las salidas (en Interface Builder) son variables miembro de una clase donde los objetos del diseñador se asignan cuando se cargan en tiempo de ejecución. La macro IBOutlet (que es #define vacía) indica a Interface Builder que la reconozca como una salida para mostrar en el diseñador.

Por ejemplo, si arrastro a cabo un botón, a continuación, conectarlo a la toma de aButton (definido en mi interfaz .h), la carga del archivo en tiempo de ejecución SEMILLA asignará aButton el puntero a esa instancia por el UIButton PUNTA.

@interface MyViewController : UIViewController { 
    UIButton *aButton; 
} 

@property(nonatomic, retain) IBOutlet UIButton *aButton; 

@end 

Luego, en la puesta en práctica:

@implementation MyViewController 

@synthesize aButton; // Generate -aButton and -setAButton: messages 

-(void)viewDidAppear { 
    [aButton setText:@"Do Not Push. No, seriously!"]; 
} 

@end 

Esto elimina la necesidad de escribir código para crear una instancia y asignar los objetos GUI en tiempo de ejecución.


cuanto a Delegados, son objetos de eventos que recibe utilizados por otro objeto (por lo general una clase API generalizada como una vista de tabla). No hay nada inherentemente especial sobre ellos. Es más un patrón de diseño. La clase delegado podrá definir varios de los mensajes esperados tales como:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

... y el objeto API llama a este mensaje en el delegado cuando se quiere notificará del evento. Por ejemplo:

-(void)update:(double)time { 
    if (completed) { 
     [delegate process:self didComplete:totalTimeTaken]; 
    } 
} 

y el delegado define el mensaje:

-(void)process:(Process *)process didComplete:(double)totalTimeTaken { 
    NSString *log = [NSString stringWithFormat:@"Process completed in %2.2f seconds.", totalTimeTaken]; 
    NSLog(log); 
} 

Tal uso podría ser:

Process *proc = [Process new]; 
[proc setDelegate:taskLogger]; 
[proc performTask:someTask]; 

// Output: 
// "Process completed in 21.23 seconds." 
+0

Entonces, los delegados son en realidad versiones glorificadas de lo que otros lenguajes como Javascript o Python interpretan como devoluciones de llamada, ¿correcto? – SexyBeast

9

Un delegado es un objeto que otro objeto puede reenviar mensajes a. En otras palabras, es como cuando tu mamá te dijo que limpiaras tu habitación y le perdonaste a tu hermanito. Tu hermanito sabe cómo hacer el trabajo (ya que eras demasiado perezoso para aprender) y lo hace por ti.

+1

¡Qué maravillosa comparación didáctica! –

+1

¿Por qué mamá no le preguntó directamente al hermano pequeño? – super9