Lorsque nous avons écrit notre livre de programmation iPhone, Tous les exemples de code et de documentation d'Apple a utilisé le mot-clé IBOutlet exactement comment nous avions toujours utilisé en Cocoa pour Mac OS X, placé en face de la déclaration de variable, par exemple, comme tant
Quelque part le long de la ligne, je ne sais pas exactement quand, ils ont commencé à mettre le modificateur IBOutlet dans la déclaration des biens au lieu, comme ceci:
Or, en pratique, il n'y a absolument aucune différence dans la manière dont les fonctions d'un contrôleur de classe basée sur l'endroit où vous placez le mot-clé IBOutlet. J'ai utilisé les deux approches, même mêlés dans la même classe, et j'ai remarqué aucune différence. Ce n'était pas assez pour moi, bien, je voulais savoir s'il y avait une différence fondamentale entre les deux - une différence dans la manière dont les connexions ont été faites.
Vous voyez, dès le début, sur le temps de SDK2, je me souviens que quelqu'un en disant qu'ils avaient testé et les mutateurs pour leurs IBOutlets n'obtenaient pas appelée lorsque la sortie de connexions ont été faites. Ce fut une surprise car le code source échantillon a été en utilisant les propriétés de tous les IBOutlets, même si ce n'était pas la façon dont il avait été fait en Cocoa sur Mac, et si les manipulateurs ne sont pas s'habituer, il ne serait pas aucune raison de déclarer une propriété pour les points de vente.
Cela m'a fait demander si, peut-être, Interface Builder seulement utilisé la mutator si vous mettez le mot clé IBOutlet sur la ligne de déclaration de propriété, mais pas si vous mettez le précédant la déclaration de variable par exemple. Il semblait y avoir une logique à cela, étant donné le changement d'Apple dans le placement préféré des mots clés à partir IBOutlet la variable d'instance à la propriété. Si c'est le cas, alors il serait important de savoir, parce que vous pourriez obtenir de légères différences dans le comportement dans certaines circonstances rares sur la base duquel vous avez utilisé.
Vous vous demandez devrait conduire à l'exploration, alors j'ai décidé de le découvrir. Il est assez facile de tester - J'ai créé un projet d'application iPhone avec deux étiquettes sur une vue, et deux sorties d'être connecté à ces deux étiquettes. L'un des points a été donné le mot-clé IBOutlet précédant la déclaration de variable d'instance, l'autre a été donné la déclaration IBOutlet dans le cadre de la propriété. Dans les deux cas, j'ai mis en œuvre les méthodes mutator manuellement afin qu'ils imprimer un relevé dans le journal à chaque fois qu'ils ont été appelés en outre à faire l'affectation.
Ainsi, il semble que vous pouvez utiliser n'importe quelle clé de placement que vous préférez, même si Apple semble bien se passer de placer l'IBOutlet dans la déclaration de propriété pour tous leurs exemples de code et de nouvelles listes de code de la documentation, de sorte que si vous croyez fermement qu'il devrait être mis sur la variable d'instance, c'est probablement le meilleur endroit pour le mettre, et probablement là où nous allons le mettre si jamais on fait une seconde édition.
#import
@interface MyViewController : UIViewController {
IBOutlet UILabel *myLabel;
}
@property (nonatomic, retain) UILabel *myLabel;
@end
Quelque part le long de la ligne, je ne sais pas exactement quand, ils ont commencé à mettre le modificateur IBOutlet dans la déclaration des biens au lieu, comme ceci:
#import
@interface MyViewController : UIViewController {
UILabel *myLabel;
}
@property (nonatomic, retain) IBOutlet UILabel *myLabel;
@end
Or, en pratique, il n'y a absolument aucune différence dans la manière dont les fonctions d'un contrôleur de classe basée sur l'endroit où vous placez le mot-clé IBOutlet. J'ai utilisé les deux approches, même mêlés dans la même classe, et j'ai remarqué aucune différence. Ce n'était pas assez pour moi, bien, je voulais savoir s'il y avait une différence fondamentale entre les deux - une différence dans la manière dont les connexions ont été faites.
Vous voyez, dès le début, sur le temps de SDK2, je me souviens que quelqu'un en disant qu'ils avaient testé et les mutateurs pour leurs IBOutlets n'obtenaient pas appelée lorsque la sortie de connexions ont été faites. Ce fut une surprise car le code source échantillon a été en utilisant les propriétés de tous les IBOutlets, même si ce n'était pas la façon dont il avait été fait en Cocoa sur Mac, et si les manipulateurs ne sont pas s'habituer, il ne serait pas aucune raison de déclarer une propriété pour les points de vente.
Cela m'a fait demander si, peut-être, Interface Builder seulement utilisé la mutator si vous mettez le mot clé IBOutlet sur la ligne de déclaration de propriété, mais pas si vous mettez le précédant la déclaration de variable par exemple. Il semblait y avoir une logique à cela, étant donné le changement d'Apple dans le placement préféré des mots clés à partir IBOutlet la variable d'instance à la propriété. Si c'est le cas, alors il serait important de savoir, parce que vous pourriez obtenir de légères différences dans le comportement dans certaines circonstances rares sur la base duquel vous avez utilisé.
Vous vous demandez devrait conduire à l'exploration, alors j'ai décidé de le découvrir. Il est assez facile de tester - J'ai créé un projet d'application iPhone avec deux étiquettes sur une vue, et deux sorties d'être connecté à ces deux étiquettes. L'un des points a été donné le mot-clé IBOutlet précédant la déclaration de variable d'instance, l'autre a été donné la déclaration IBOutlet dans le cadre de la propriété. Dans les deux cas, j'ai mis en œuvre les méthodes mutator manuellement afin qu'ils imprimer un relevé dans le journal à chaque fois qu'ils ont été appelés en outre à faire l'affectation.
Et le résultat?
Il apparaît que lorsque vous placez le mot-clé IBOutlet, sur toutes les versions actuelles du SDK (2.0, 2.1, 2.2), est purement stylistique et n'a aucun impact sur ce qui se passe sous le capot. Pour les deux sorties, le mutator a été appelée lorsque les points de vente ont été connectés au cours du démarrage d'application.Ainsi, il semble que vous pouvez utiliser n'importe quelle clé de placement que vous préférez, même si Apple semble bien se passer de placer l'IBOutlet dans la déclaration de propriété pour tous leurs exemples de code et de nouvelles listes de code de la documentation, de sorte que si vous croyez fermement qu'il devrait être mis sur la variable d'instance, c'est probablement le meilleur endroit pour le mettre, et probablement là où nous allons le mettre si jamais on fait une seconde édition.
Aucun commentaire:
Enregistrer un commentaire