2016-08-12 3 views
0

J'ai ajouté plusieurs UIViews en dehors de UIViewController et toutes les vues ont une prise de semaine connectée. Comment puis-je libérer la mémoire de toutes les vues lorsque pop pour sauvegarder ViewController. enter image description hereComment supprimer les UIViews externes de UIViewController?

enter image description here

+0

N'utilisez-vous pas ARC? –

+0

Recevez-vous des avertissements de mémoire ?? –

+0

Si c'est faible, vous n'avez pas à vous inquiéter, je crois. – ldindu

Répondre

2

Première: Vues (ou d'autres objets) au niveau supérieur d'un xib ne devraient pas avoir un weak type de propriété dans leur contrôleur de vue correspondant. Contrairement aux vues de la hiérarchie des vues, elles n'ont pas de propriétaire après le chargement de xib et donc elles sont libérées de toute façon.

Maintenant, vous semblez utiliser des ivars directement (pourquoi?), donc je ne suis pas sûr, mais je ne pense pas que cela fasse une différence. En supposant qu'Interface Builder les accepte comme des points de vente et les définit, ils disparaissent bientôt sans propriétaire.

De ce point de vue, vous avez déjà enregistré la mémoire ...

Sans en savoir plus sur votre projet, je ne peux pas dire, mais le fait que vous n'êtes pas demander de l'aide sur l'exécution en nil problèmes me fait deviner que vous prenez possession de ces points de vue ailleurs. Pour les libérer, vous devez définir quelle que soit la propriété ( espérons bientôt en utilisant les propriétés pour cela) se réfère à eux fortement à nil. ARC fait le reste pour vous. Vous n'utilisez pas ARC? Commencez à l'utiliser ...

Je recommande de restructurer cela. Donner le contrôleur de vue (je suppose que c'est une sorte de FirstFlyerViewController) fortes propriétés aux vues (si vous avez absolument besoin de les avoir en dehors de la hiérarchie de vue, sinon, il suffit de les ajouter sous-vues quelque part). Utilisez-les, et une fois que vous faites apparaître le contrôleur de vue et il obtient désengagé (notez que ceci est habituellement fait par le cadre et pas vous-même) ils sont libérés avec lui.

+0

j'apprécie mais je n'utilise pas ARC .. comment puis-je enlevé toutes les vues sans ARC? –

+0

Si vous n'utilisez pas ARC, vous ne devriez pas utiliser les mots-clés '__strong' et' __weak', ils appartiennent conceptuellement à ARC (ont été introduits avec lui). Je suis surpris que le compilateur ne se plaint pas. Pour abandonner la propriété des vues, vous leur envoyez un message de libération: '[aView release]'. Mais comme je l'ai dit, cela suppose que vous possédez quelque part. Les captures d'écran impliquent que vous n'avez pas. Je vous recommande fortement de repenser votre structure xib et app. Pensez aussi à utiliser les propriétés. – Gero