8

Je n'arrive pas à comprendre le concept des points de vente comment l'iPhone gère les événements. Aidez-moi! Les délégués me confondent aussi. Est-ce que quelqu'un voudrait expliquer, s'il vous plaît?Terminologie de l'objectif C: points de vente et délégués

+2

ne cherche pas à être un jerk mais avez-vous lu les documents d'introduction à developer.apple.com? C'est juste que la question prendrait un essai pour répondre. Peut-être poser une question plus détaillée sur ce qui vous raccroche. –

+0

La documentation fournie par Apple dans le Guide des principes fondamentaux du cacao sur les points de vente: http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/CocoaFundamentals/CommunicatingWithObjects/CommunicateWithObjects.html#//apple_ref/doc/uid/ TP40002974-CH7-SW3 et délégués: http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/CocoaFundamentals/CommunicatingWithObjects/CommunicateWithObjects.html#//apple_ref/doc/uid/TP40002974-CH7-SW18 semble assez minutieux pour moi. –

+0

@Brad - Je ne suis pas une personne de documentation. – Moshe

Répondre

19

Les sorties (dans Interface Builder) sont des variables membres d'une classe dans laquelle les objets du concepteur sont affectés lorsqu'ils sont chargés lors de l'exécution. La macro IBOutlet (qui est un #define vide) signale Interface Builder pour le reconnaître comme une sortie à afficher dans le concepteur.

Par exemple, si je fais glisser un bouton, puis connectez-le à la sortie aButton (définie dans mon interface .h), le chargement du fichier NIB lors de l'exécution attribuera aButton le pointeur vers cette UIButton instancié par la PLUME.

@interface MyViewController : UIViewController { 
    UIButton *aButton; 
} 

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

@end 

Puis, dans la mise en œuvre:

@implementation MyViewController 

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

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

@end 

Cela permet d'éliminer la nécessité d'écrire du code pour instancier et affecter les objets de l'interface graphique lors de l'exécution.


Quant aux délégués , ils sont des objets de réception de l'événement utilisés par un autre objet (généralement une classe généralisée de l'API telles que une vue de tableau). Il n'y a rien de fondamentalement spécial à leur sujet. C'est plus d'un motif de conception. La classe délégué peut définir plusieurs des messages attendus tels que:

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

... et l'objet API appelle ce message sur le délégué quand il veut l'informer de l'événement. Par exemple:

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

Et le délégué définit le message:

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

Une telle utilisation pourrait être:

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

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

Donc les délégués sont des versions réellement glorifiées de ce que d'autres langages comme Javascript ou Python interprètent comme des callbacks, correct? – SexyBeast

9

Un délégué est un objet qu'un autre objet peut transmettre des messages. En d'autres termes, c'est comme lorsque votre mère vous a dit de nettoyer votre chambre et que vous l'avez mis en gage sur votre petit frère. Votre petit frère sait comment faire le travail (puisque vous étiez trop paresseux pour apprendre) et il le fait pour vous.

+1

Quelle comparaison merveilleuse et didactique! –

+1

Pourquoi maman n'a pas demandé directement au petit frère? – super9