samedi 3 mars 2012

Ne craignez pas le Interface Builder

La question de savoir s'il faut utiliser Interface Builder n'est pas un des développeurs les plus expérimentés de cacao que j'ai parlé à lutter avec. Fondamentalement, ils utiliser Interface Builder sauf s'ils ont une bonne raison de ne pas. Et des raisons de ne pas sont relativement rares.

Dans les jours avant l'iPhone, Apple Liste Cocoa Dev postale serait de temps en temps vous une question posée par quelqu'un de nouveau à Objective-C et Cocoa qui voulait créer son interface graphique par programmation. Voici un response à l'une de ces questions de connaissances Cacao / NeXTSTEP programmeur et fréquentes Cocoa Dev contributeur John C. Randolph chemin du retour en 2001 que les clous à peu près tout:
Cette question revient assez souvent, et la réponse est oui, il peut être fait dans le code (qui, après tout est ce-loadNibFile: fait), mais il n'y a plus aucune raison d'abandonner IB que ce qu'il ya à renoncer à des compilateurs et écrire tout votre code avec un éditeur hexadécimal.
Yep. Je ne pouvais pas imaginer une meilleure façon de le dire, c'est pourquoi j'ai cité Jean de huit ans de réponse ancien.

Avec la popularité de l'iPhone, nous avons vu une recrudescence du nombre de personnes désireuses de créer leurs interfaces par programmation à nouveau. Il ya un certain nombre de facteurs contribuent à cela. D'abord et avant tout, c'est que nous avons obtenu beaucoup de gens de différents milieux, y compris les personnes qui ont travaillé avec les langages et les outils avec les constructeurs GUI qui utilisent différentes, des approches plus problématique ou qui n'ont tout simplement jamais travaillé avec la construction d'applications GUI dans un langage compilé à tous. Une autre des raisons est que Interface Builder a été initialement pas disponible pour l'iPhone, donc beaucoup d'applications, et même une bonne quantité d'exemples de code au début d'Apple a été écrit sans elle, que les nouveaux arrivants d'avoir une idée fausse que Interface Builder est juste en option: purement personnelles préférence.

Poussé par un commentaire dans un blog récent affichage, j'ai décidé d'essayer d'expliquer plus en détail pourquoi vous ne devriez pas éviter d'Interface Builder. La plupart de ces informations est recyclé de mon matériel Boot Camp Atelier iPhone.

Si votre intestin vous dit d'éviter de Buidler interface, pour une raison quelconque, votre intestin est faux. Ce n'est pas un de ces cas où il ya plus d'une façon juste et c'est purement une question de préférence personnelle. Interface Builder est clairement la meilleure façon et avec une très bonne raison: elle rend vos applications plus rapides à créer et facile à maintenir. Mais il ya encore plus compliqué que cela.


Le nom de Interface Builder est en fait un peu trompeur. Il est beaucoup plus puissant que le nom implique, et il est important de comprendre pourquoi.

Interface Builder ne génère pas de code. Il ne crée pas un fichier des formes de toute sorte. Ce qu'il fait, est en réalité instancier et configurer les mêmes objets que vous utilisez dans votre application de montrer votre interface utilisateur. Si vous ajoutez un bouton à votre demande dans Interface Builder, vous êtes effectivement créer une instance de UIButton ou NSButton. Lorsque vous configurez, vous êtes effectivement mise en état sur cette instance de bouton. Puis, lorsque le fichier nib est enregistré, ce bouton devient sérialisé dans le fichier nib utilisant NSCoding, exactement comme nous avons persisté objets de la section d'archivage du chapitre persistance dans Début du développement de l'iPhone 3. Fondamentalement, le chargeur de plume est exactement ce que le code que vous écririez pour créer et configurer l'objet de l'interface ferait, en baisse à la méthode actuelle utilisée appels.

Pourquoi est-ce mieux que la génération de code ou d'un fichier forme? Eh bien, en plus de vous laisser tirer parti du code extraordinairement bien testé pour construire votre interface utilisateur, cela signifie aussi que vous n'êtes pas limité à avoir juste des éléments d'interface utilisateur dans votre plumes. Vous pouvez mettre des instances de tous les objets qui sont conformes aux NSCoding, qui est le protocole qui permet aux objets d'être sérialisé et désérialisé. Tout objet du tout. Dans les modèles iPhone projet Xcode, c'est la façon dont votre délégué demande et votre contrôleur de vue racine se crée.

Il ya une philosophie de conception à l'œuvre ici. C'est simple et important. Cette philosophie de conception va comme ceci:

Any line of code you don't have to write, is a line of code you don't have to maintain and is a line of code that you can't introduce a bug into.
Simple, mais élégant. Et précieux.

Si vous écrivez des tonnes de code pour implémenter votre interface utilisateur, c'est beaucoup de code que vous avez à écrire, à maintenir et à déboguer. Le code de chargement plume est solide. Il a été autour sacrément près de 20 ans et est utilisé dans des milliers d'applications de production, y compris la plupart des applications Apple. Apple très bien "mange leur nourriture pour chiens propres" quand il s'agit de leurs outils de développement. Si vous regardez à l'intérieur des faisceaux d'une demande d'Apple, les chances sont très élevées que vous trouverez quelques fichiers nib là-dedans.

Je sais que certains d'entre vous voudront continuer à résister à Interface Builder. Ne pas. Sérieusement. Vous perdez votre temps. Vous sont inefficaces si vous créez votre interface utilisateur directement dans le code quand il n'est pas une raison impérieuse d'. Il ya des moments où la route programmatique est le bon choix. Il ya des moments où il est logique de programmation créer votre interface utilisateur. En réalité, cependant, ces moments sont très rares et très espacées.

Oui, il ya une courbe d'apprentissage, en particulier avec le débogage. Mais rester avec elle. Il ne sera pas long avant que vous reconnaître les signes d'une prise débranchée ou d'autres problèmes liés à IB et dans le long terme, les gains seront plus que de justifier l'investissement de temps.

Aucun commentaire: