6
votes

AddSubView Incrément Retine-t-il le nombre?

Je l'ai testé et on dirait que ça fait. Donc, ma question est, est-ce que cela incrémente toujours le nombre de retenties?

Donc, chaque fois que je fais quelque chose comme ça: xxx

am je fuit réellement la mémoire? < p> J'ai une propriété globale @property (nonatomic, conserver) Uilabel * ingrédientstextLabel; que j'instéenne dans ViewDidLoad avec ce code:

J'ai juste la propriété nommée, il n'y a pas de propriété pour elle dans mon en-tête, donc pas de getter et de setter. Dans mon ViewDidloadload : xxx

Maintenant, je pensais que cela fonctionnerait et je peux ensuite libérer ingénientstextlabel , mais Retenir le compte est 2, alors dois-je aussi libérer i après i Addsubview aussi bien ? Je n'ai pas réalisé que cela se produit! : (


0 commentaires

3 Réponses :


10
votes

Oui, "AddSubView" augmente le nombre de retenues. Cela a du sens car la méthode stocke la sous-vision qui ne doit pas être libérée / libérée tant que le SUPERVIEW est également publié. Lorsque la version SUPERVIEW est publiée, elle libère également toutes ses sous-visions.


3 commentaires

Correct. Thomas, vous n'avez pas besoin de faire une autre version après AddSubview: vous devriez simplement vous inquiéter de libérer une fois par alloc / init. Si AddSubView: Augmente le nombre de retenues, il est de sa responsabilité de le libérer.


Oh bien ... je vois. Merci. Cela signifie-t-il que si j'étais alloc / init un UIView, ajoutez-le sous forme de sous-visView de self.view puis libérez-le que le compte de contention est toujours 1? Ainsi, même si je l'ai publié, puis-je toujours envoyer des messages informatiques? Merci


Oui c'est correct. Mais si vous stockez une référence à votre UIView, vous devez également conserver cet UIView. Ce n'est pas parce que c'est le style cococa / obj-c.



3
votes

N'utilisez pas -RetainCount.

Le nombre absolu retenir le nombre d'un objet n'a pas de sens.

Vous devez appeler libérer le même nombre de fois que vous avez amené l'objet à retenir. Pas moins (sauf si vous aimez les fuites) et, certainement, plus (sauf si vous aimez les accidents).

Voir le Directives de gestion de la mémoire pour plus de détails.

Si vous + NOUVEAU / + ALLOC / --Retain / -Copiez (NARC) Un objet, vous devez équilibrer le conserver avec une libération (ou une auto-cercease). Fin de l'histoire. Le comptage de retenue absolu, en particulier l'absolu de conserver le nombre d'une instance d'une classe sous-classée d'une classe-cadre et / ou adoptée dans le code-cadre, est un détail de mise en œuvre et assez susceptible de ne pas être ce que vous pense que ça devrait être.


0 commentaires

2
votes

En fait, ça fait. Vous pouvez vous renvoyer ceci à http://developer.apple.com/library/ios/documentation/cikit/reference/uiview_class/uiview/uiview.html#//apple_ref/ocr/instm/uiview/addsubview :

Bien sûr, la SuperView conserve la sous-visVIEW sur AddSubView: il est donc libéré lors de la suppression de la sous-Signifie.


4 commentaires

P.s. Le côlon à la fin du lien est nécessaire.


+1 Pour répondre à la question, mais vous avez écrit «en fait cela». Que fait? Qu'est ce que ça fait? Je suis confus! (Modifiez votre réponse à l'aide du lien «Modifier» sous le texte de votre réponse).


Wow, seule une réponse sur une année et un peu plus tard que la question a été posée et a en effet répondu! Scrimer Je pense que Jason en disant "en fait" à la question "L'incrément dedsubview incrément retient-il?". Pas que rien d'entre cela importe avec l'avènement du comptage automatique de référence. : p


Oui, "En fait," est "est pour la question" DoDsubview incrément retient le nombre? "