Dis que j'ai une classe de tableView qui répertorie 100 objets FOO. Il a: et je le remplit avec des foos comme: p> première question: parce que le nsmutableArraRay est marqué comme conserver, que signifie que tous les objets à l'intérieur sont retenus aussi? Suis-je correctement ajouté le FOO et publier la copie locale après avoir été ajoutée au tableau? Ou est-ce que je manque un appel de conserver? P> Puis si l'utilisateur sélectionne une ligne spécifique dans la table et que je souhaite afficher un détail FOO View i Call: P>
@property (nonatomic, assign) Foo* theFoo;
3 Réponses :
Oui, ça va. C'est tout le point d'un système de gestion de la mémoire de comptage de référence. P>
Pour répondre à votre question principale, oui, vous pouvez utiliser plusieurs objets conservant une instance. C'est exactement le point de référence - la gestion de la mémoire comptée. Regardez le cacao Guide de programmation de la gestion de la mémoire A> Pour plus d'informations. Puis relisez-le. Il a toutes les réponses et sera votre meilleur ami. Fondamentalement, l'envoi d'un message sur une note latérale, p> déclare que La classe déclarant que cette propriété conservera l'instance -Retain code> indique que l'expéditeur "possède" le récepteur dans le sens où le récepteur ne doit pas être déroulé tous les propriétaires em> ont libéré leur propriété. Ainsi, des instances individuelles n'ont pas besoin de savoir (ni de se soucier de soi-même) si d'autres propriétaires existent. Conservez tout ce dont vous avez besoin pour me tenir autour et le relâcher lorsque vous en avez terminé. Lorsque tous les propriétaires em> ont libéré leur propriété, une intensance peut être traitée. P> nsmutableArray code>. nsarray code>, nsdictionary code> et nsset code> (et leurs sous-classes mutables) conservent toujours leur contenu. P> P>
Comme d'autres disent, ce que vous faites est correct et que le code a l'air me corrigé. J'ai des dizaines de références au même objet dans mon code et aussi longtemps que j'ai équilibré toutes les conserves et les rejets, tout fonctionne bien. P>
Pour ajouter un peu plus de détails ... vous demandez: P>
Parce que le nsmutableArray est marqué comme conserver, cela signifie que tous les objets à l'intérieur sont retenus aussi? P> blockQuote>
Ce sont deux choses différentes. Toutes les classes de collecte (dictionnaires, tableaux, ensembles) conservent automatiquement les choses que vous leur ajoutez et libérez leurs objets de contenu lorsque l'objet de collecte est distribué. (En cas de NsmutableArray, l'objet de contenu est libéré si vous le retirez individuellement de la matrice ou lorsque vous annouez l'ensemble du tableau.) P>
Cela n'a rien à voir avec si l'objet de collecte lui-même est conservé ou attribué en tant que propriété. La seule chose à considérer qu'il y ait que si votre politique pour la propriété de la collection objet n'est pas correcte, elle pourrait être libérée tôt ou tard que vous ne le pensez et les choses peuvent être déséquilibrées. P>
Comme d'autres disent ... Lisez le Guide de gestion et pratique. :) Oh, et lisez aussi le code des autres de cette perspective et essayez de comprendre comment / pourquoi ils font leur gestion de la mémoire. P>
Une autre petite chose ... Pour chaque propriété retenue, assurez-vous de disposer d'un appel de publication dans la méthode de transloc de l'objet. P>
TYPO: "... et libère leurs objets de contenu lorsque l'objet de collecte est publié." Les objets des collections ne sont pas publiés avant que la collection soit Deallocated i>.
Merci, corrigé. Bien que vous puissiez faire valoir que par "publié", je voulais dire "la dernière version, dans laquelle retenir le nombre de comptes va à zéro, qui déclenche Analloc": P, mais simplement dire que DealLoc est plus clair dans ce contexte.