Question

J'ai passé du temps à apprendre comment utiliser le SDK iPhone. J'ai lu « Début iPhone développement: Explorer le SDK iPhone » de la couverture pour couvrir et je ne l'ai jamais vu un exemple de plusieurs vues au sein d'un XIB.

Pour illustrer ce que je veux dire, voici une capture d'écran d'un avec la configuration XIB simple de ce que je fais référence à:

texte alt http: // theopensourceu. com / wp-content / uploads / 2009/04 / un-XIB multiples views.png

je me dis que qu'il doit y avoir une raison très précise que je ne l'ai jamais vu cela. Dans les exemples d'Apple et dans toutes mes lectures à ce jour, plusieurs XIBs sont utilisés avec une seule « vue » (et parfois le contrôleur de navigation ou un contrôleur de la barre d'onglets, etc.). Quelle est la raison pour ça? Dois-je éviter de multiples points de vue à l'intérieur d'une XIB? Quels sont les avantages ou inconvénients de ces deux méthodes?

Merci d'avance

Était-ce utile?

La solution

Il est une question d'optimisation de la mémoire et les temps de chargement. Si vous mettez tous vos points de vue dans un XIB, puis lorsque le lancement de votre application, il doit charger l'ensemble XIB en mémoire et construire tous les objets pour toutes les commandes, et cela prend une quantité non négligeable de temps.

Si au contraire vous séparer vos vues dans XIBs séparées, votre application va commencer beaucoup plus vite, car seul le contenant la vue XIB initiale sera chargé, et il utilisera moins de mémoire dans un premier temps. Puis, quand la vue change, vous pouvez charger le contenant la nouvelle XIB vue paresseusement. Cela entraînera un accroc mineur lors de l'ouverture d'une vue pour la première fois. Si vous êtes vraiment en essayant d'optimiser l'utilisation de la mémoire, vous pouvez également décharger la vue précédente lors du passage des vues, mais je ne recommanderais pas cela, car cela entraînera un accroc à chaque fois que vous changez de vue, au lieu de seulement la première fois que vous passez à une vue donnée.

Autres conseils

Faisant suite à la réponse précédente, il y a des moments où vous souhaitez charger plusieurs vues en même temps. Voici un exemple: Vous affichez un rapport de plusieurs pages et vous allez utiliser un UIScrollView pour les gérer. Lorsque l'utilisateur est fait parcourant le rapport, il fermera le rapport qui rejettera la vue.

Créer un UIScrollView dans un long avec un XIB UIView pour chaque page dont vous avez besoin. Étant donné que les UIViews font partie du XIB, ils seront chargés dans la mémoire en même temps, à la fois, lorsque le rapport est ouvert. Créer deux UIViewControllers et les utiliser pour afficher la page en cours de visualisation et celui qui est défilée à. Lorsque l'utilisateur se déplace à travers les pages, réutilisent les UIViewController sur la page étant loin de défiler pour maintenir la page en cours de défilement.

Cela permettra d'assurer d'excellentes performances pendant que l'utilisateur est en train de feuilleter les pages. Il charge toutes les pages à la fois à l'avant dans la mémoire. Je n'utilise que deux UIViewControllers, et il change juste les vues sont en eux et les déplace autour.

Cela a aussi le grand avantage d'avoir toutes les pages dans un XIB. Il rend plus facile à modifier, et plus rapide à charger que de xib distincts. Il vous suffit de vous assurer que vous avez la mémoire pour charger toutes les pages à la fois. Si c'est le contenu statique (comme dans mon cas), il est un excellent moyen d'aller.

Si vous cherchez un bon exemple de la façon de procéder, j'ai trouvé cette ressource pour être un excellent point de départ:

http://cocoawithlove.com/2009/01 /multiple-virtual-pages-in-uiscrollview.html

Ceci est un avertissement à tous ceux qui essaient de mettre en œuvre le paysage et portrait avec deux vues en une seule (iOS 4 XIB avec Xcode 4). Le principal inconvénient d'avoir deux points de vue en une seule pour moi-XIB, était que vous ne pouvez connecter un seul objet UIOutlet dans un à un seul XIB objet UIOutlet dans un contrôleur de vue.

Ainsi, par exemple, si vous avez un XIB en vue pour le paysage et une vue pour le portrait, et les deux vues contiennent les mêmes objets d'interface dans différentes positions (comme un UILabel dans le paysage et un UILabel en mode portrait). Il est impossible de lier le UILabel dans votre mode portrait et l'objet UILabel dans la vue du paysage à un seul objet UILabel dans le contrôleur de vue en même temps .

Je trouve cela une déception, car la documentation iOS UIViewController (iOS 4.3) a suggéré que je pourrais mettre en œuvre des vues du paysage et portrait personnalisé en passant entre deux vues par programmation lors de la rotation de l'écran.

Après avoir passé un certain temps pour comprendre comment faire, j'ai découvert qu'il est possible d'avoir deux points de vue différents attachés à un seul contrôleur de vue, mais vous devez avoir des débouchés pour les deux vues. Par exemple, dans mon contrôleur de vue, j'ai deux objets UILabel (un pour se connecter à un UILabel en mode portrait, l'un pour se connecter à un UILabel dans la vue du paysage). Dans mon code, chaque fois que je mets à jour la sortie du paysage, je mettre à jour aussi le paysage portrait.

Pas très élégant, mais il fonctionne, et que cela est une vue simple avec un écran, il ne sera pas utiliser trop de mémoire pour avoir avoir tous les objets d'interface utilisateur en double dans le contrôleur et les vues. Je ne voudrais pas créer un projet qui a fait de cette façon à nouveau, mais il était assez bon travail autour de ce projet.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top