2010-07-29 5 views
1

Eh bien cela a été me casser les pieds pendant un certain temps maintenant je vais demanderQuand doit-uiviewcontrollers être déclarée comme propriétés

Quand doit-uiviewcontrollers être déclarée comme propriétés? J'ai remarqué que dans de nombreux exemples, les contrôleurs qui sont poussés et déclenchés sur un contrôleur d'uinavigation sont et non déclarés comme propriétés.

J'ai pris cela en avant et maintenant chaque uiviewcontroller que j'utilise dans mon code n'est pas déclaré comme une propriété (la mémoire ofc est manipulée avec soin), même mon contrôleur de vue principal à l'intérieur de l'appdelegate. Cependant, comme l'instrument signalait une fuite, j'ai essayé de le déclarer comme une propriété ... le résultat est que, même si la fuite est toujours quelque part, l'occupation de la mémoire par l'application a été réduite de moitié. Alors maintenant, je me demande ... est-ce que mon approche est complètement fausse et tous les contrôleurs doivent être déclarés comme des propriétaires? Y at-il une raison particulière pour déclarer un uiviewcontroller comme une propriété ou non?

grâce à des conseils à ce sujet

Répondre

0

Voir vues du contrôleur peuvent prendre beaucoup de mémoire, et l'iPhone n'a pas de beaucoup de mémoire pour épargner. Peut-être qu'il y a une partie du contrôleur dont vous avez besoin, mais je n'en garderais pas une à moins qu'elle ne soit absolument nécessaire d'être gardée après son renvoi.

+0

Ouais mais quand devraient-ils être déclarés comme une propriété et quand pas? – koda

0

Vous ne souhaitez conserver qu'une référence au UIViewController si vous devez y accéder à nouveau depuis le contrôleur de vue auquel vous l'avez poussé. Vous ne voulez pas vraiment le garder en mémoire tout le temps dans n'importe quelle autre situation, et considérer "charger paresseux" tous vos contrôleurs de vue à la place (probablement ce que vous faisiez auparavant) et les relâcher immédiatement (UINavigationController contient une référence conservée) , afin que votre application ne plante pas/ne la libère pas pendant qu'elle est à l'écran).

Quel était le code qui, selon les Instruments, fuyait? S'il vous plaît poster.

+0

instruments signalait l'avertissement dès le début dans l'appdelegate ('[uiwindow addSubview: mainViewController.view];') mais c'était avec le simulateur et maintenant que je peux tester sur l'appareil il n'imprime rien. le code auquel je fais référence est plus proche de ce fichier: http://code.google.com/p/hedgewars/source/browse/project_files/HedgewarsMobile/Classes/MainMenuViewController.m les deux viewcontrollers doivent être des variables d'instance car elles sont utilisées dans SwitchView mais ce ne sont pas des propriétés. devraient-ils être? – koda