2010-04-28 3 views
1

J'ai travaillé sur un projet iPhone, où nous avons créé toute l'interface utilisateur par programmation dans le code. Maintenant, je vais commencer un nouveau projet iPhone et penser à utiliser Interface Builder à la place, car il m'a été recommandé comme un outil très utile, créant moins de mal de tête que d'écrire tout dans le code et en général beaucoup plus rapidement).iPhone: Interface Builder perd de la mémoire?

Cependant, les membres de mon équipe ont des préoccupations en raison de problèmes antérieurs liés à l'utilisation d'Interface Builder et des fuites de mémoire qui en résultent. Pour cela, ils suggèrent de tout reconstruire dans le code. Je ne sais pas d'où viennent ces préoccupations, mais peut-être que quelqu'un ayant plus d'expérience que nous avons peut donner un aperçu sur ce sujet.

Faire un Google search simple ne fournit pas vraiment d'informations prouvant qu'il y a des problèmes avec les fuites de mémoire créées par l'Interface Builder lui-même.

En regardant la official documentation d'Apple, je ne vois que ces trois choses que je dois prendre soin de:

@property (nonatomic, retain) IBOutlet UIUserInterfaceElementClass *anOutlet; 

« Vous devriez alors soit synthétiser les accesseurs correspondants, ou les données selon le la déclaration, et (dans iPhone OS) libérer la variable correspondante dans dealloc. "

- (void)viewDidUnload { 
    self.anOutlet = nil; 
    [super viewDidUnload]; 
} 

Tout ce que je manqué?

Répondre

4

Lorsque vous affectez un IBOutlet via Interface Builder, cet objet est conservé par le contrôleur par défaut (même sans définir explicitement une propriété avec retain). Par conséquent, vous devez soit libérer toutes les prises, soit définir une propriété avec assign.

Ceci est un getcha qui obtient le plus de gens, et conduit à la plus commune des fuites de mémoire. Surtout sur les vues qui sont affichées et supprimées à plusieurs reprises.

+0

Merci Mark. C'est ce que j'ai trouvé dans la documentation officielle d'Apple (voir ma question éditée ci-dessus). Avez-vous eu une mauvaise expérience concernant les fuites de mémoire créées par Interface Builder lui-même. Ce qui signifie que quelque chose avec l'outil est faux plutôt qu'avec mon code? – znq

+0

Je n'ai jamais rien vu avec l'outil lui-même, non. Chaque fuite de mémoire que j'ai rencontrée était due à ma propre erreur. – MarkPowell

Questions connexes