2009-07-18 4 views
0

Ils disent:dois-je libérer des IBOutlets dans - (void) viewDidUnload?

// Libérer toute retenue subviews de la vue principale. // par exemple. self.myOutlet = nul;

Je n'ai jamais vu ça auparavant. alors je me demande si ils parlent de points de nib ici?

+0

Question similaire, sinon identique: http://stackoverflow.com/questions/382576/do-i-need-to-release-iboutlets-when-using-loadnibnamed-method – titaniumdecoy

Répondre

1

Vous n'avez pas à le faire s'il y a une raison de le garder, mais en supposant que vous ayez besoin d'accéder au point d'entité par la prise si la vue a été détruite alors oui, vous devriez le relâcher. Dans le cas contraire, votre contrôleur de vue fera valoir une retenue contre tous les IBOutlets de votre nib même si la puce elle-même a été déchargée, ce qui empêche leur désallocation. Depuis ces objets peuvent avoir des textures et tels les soutenir, et l'iPhone utilise RAM principal pour la vidéo qui peut ajouter à beaucoup de mémoire gaspillée très rapidement. En outre, si viewDidLoad est appelé à nouveau, un nouvel objet aura été créé et assigné à cette sortie lorsque la pointe sera rechargée, donc si vous l'utilisez ailleurs (définissez les propriétés dans d'autres objets sur l'objet pointé par le IBOutlet), votre application peut se retrouver dans un état incohérent.

2

Semblable à la façon dont tout ce que vous allouez en init ne doit pas être alloué en dealloc.

Si vous allouez de la mémoire dans viewDidLoad, vous devez le libérer dans viewDidUnload.

Le problème devient confus lorsque vous placez des fichiers nib dans l'image. Si vous chargez manuellement le fichier nib, vous devez le décharger manuellement et définir tous les IBOutlets à zéro.