2016-06-11 1 views
1

Je suis nouveau et de gagner mon dans IOS Application Development et laissez-moi vous dire que je ne sais pas un seul bit à propos Mémoire et gestion de la mémoire. Pendant que je jouais avec tabViewController je fais deux onglets et trois ViewController et connecter les viaNavigationalController et les lier comme un cycle comme: -IOS mémoire et gestion de la mémoire

navigationController1

firstViewController - > secondViewController -> thirdViewController -> firstViewController

navigationController2

firstViewController -> secondViewController -> thirdViewController -> firstViewController

et les exécuter sur simulateur et a remarqué que dès que j'obtenir les ViewControllers sur la pile de la mémoire augmente par .1 MBs.

enter image description here

que j'ajouter une seule image de taille 4,5 Mo sur le firstViewController (NavigationController1) et exécutez l'application, je vis soudain que la mémoire atteint 66 Mb

enter image description here

Lorsque l'application démarre et que j'ajoute les viewControllers sur la pile, la mémoire augmente au même rythme que la dernière fois (.1 Mo). Comprendre la raison derrière cela et quelle est la logique de l'ensemble vu?

« Et mes excuses pour les boutons de raison ne sont pas visibles dans le tabBar il y a deux titres sur la tabBar navigation1 et Navigation2 également le bouton a la méthode pour pousser vues »

Répondre

1

Lorsqu'une image est chargée dans la mémoire est décompressée. Bien qu'une image compressée ne nécessite pas plus de 4,5 Mo pour une haute résolution (par exemple en l'enregistrant au format JPEG), sa taille non compressée peut être beaucoup plus élevée. Même si le UIImageView est juste une partie de l'écran, ou même hors écran, il nécessite encore une quantité de mémoire basée sur la résolution d'origine de l'image.

De plus, vous avez ici une boucle de contrôleur de vue. Une fois que vous allez de VC1 -> VC2 -> VC3 -> VC1 vous ne récupérerez pas votre instance originale de VC1 pour le dernier, mais une nouvelle instance, ce qui signifie que vous aurez un total de 4 contrôleurs de vue en mémoire en même temps temps. Ce que vous devriez faire pour passer de VC3 et revenir à VC1 est d'ouvrir la pile du contrôleur de vue au lieu d'ajouter une autre instance de VC1. Vous pouvez le faire en appelant self.navigationController?.popToRootViewControllerAnimated(true) sur VC3.

+0

Donc, vous essayez de dire que viewControllers ne prennent pas la taille réelle de l'image qu'ils utilisent la référence de l'image? – dreamBegin