2009-08-02 7 views
0

(Juste pour que vous savez que je suis apprendre à développer pour iPhone, sans interfacae constructeur)iPhone Dev - Multi-View App lazy loading

Je codage ma première application multi-vues, qui a une viewcontroller racine et deux viewcontrollers, et le viewcontroller root utilise le chargement paresseux, ainsi quand viewDidLoad, il crée le premier viewcontroller et ajoute sa vue à la sous-vue, mais ne crée pas l'autre tant qu'il n'est pas nécessaire. Mais, après que le second a été chargé, ils restent tous les deux jusqu'à la fin de l'application (sauf si elle reçoit un avertissement de mémoire).

Je me demande donc: lorsque l'utilisateur bascule deux l'autre vue, devrais-je décharger l'autre qui est en train d'être supprimé (en le mettant à nil - c'est une propriété de rétention)? Donc, à chaque fois que l'utilisateur clique sur le bouton, le viewcontroller actuel est déchargé (après avoir été supprimé de la vue d'ensemble) et le suivant est chargé et ajouté en tant que sous-vue?

Donc est-ce la bonne chose à faire, ou est-ce juste, mais seulement quand l'application a beaucoup de vues et que la mienne n'est pas assez compliquée pour justifier cela, ou est-ce mauvais de le faire? Laissez-le prendre soin de lui (Dans didReceiveMemoryWarning, je mets le viewcontroller qui n'est pas actuellement affiché à zéro)?

Répondre

1

La réponse dépend vraiment. En règle générale, vous devez libérer et définir à zéro la vue qui n'est pas affichée, mais si l'utilisateur va basculer entre eux fréquemment, vous pouvez conserver la vue masquée conservée (mise en cache).

Vous ne voulez pas vraiment que votre application pousse le téléphone de l'utilisateur à didReceiveMemoryWarning. Lorsque vous recevez cet avertissement, il se passe d'autres choses dans le téléphone qui peuvent bloquer votre application pendant que l'iPhone télécharge des pages Safari en cache, des objets UIImageView en cache, etc. Ce processus peut être perçu par l'utilisateur final et votre l'application peut ne pas être aussi lisse qu'elle le devrait.

Il est également important de se rappeler que certains utilisateurs utilisent des iPhones, iPod touch et 3G de première génération, donc ils n'auront pas la mémoire supplémentaire du 3GS. Cela étant dit, je me trompe sur le fait d'être conservateur avec de la mémoire, donc je libère et annule la vue, puis je la réinstancie quand l'utilisateur veut la voir. L'impact de l'allocation de la vue par rapport au nettoyage du système en raison de didReceiveMemoryWarning sera généralement beaucoup moindre sur l'utilisateur de votre application.

+0

Ok merci. Je voulais simplement dire que didReceiveMemoryWarning s'en occuperait si cela arrivait, pas comme cette application pourrait le faire. – mk12

+0

Qu'en est-il d'un contrôleur de barre d'onglets, il est assez difficile de décharger la vue qui n'est pas affichée sans la réécrire. – mk12

+0

Je pense que vous pourriez utiliser viewDidDisappear pour libérer la vue, et utiliser viewDidAppear pour le reconstruire. Techniquement, ce serait la méthode la plus efficace avec un contrôleur de barre d'onglet tenant sur votre IMHO UIViewController. –