2010-12-07 10 views
0

Comment pouvons-nous vérifier si un tableau était en mémoire ou non?Comment pouvons-nous vérifier que si un tableau a retenir count = 0 ou non?

J'ai une condition où je en ai besoin

est code suivant est correct de libérer un tableau

if (array1) 
{ 
[array1 release]; 
} 

Merci

+1

Prob devrait aussi être nul, de cette façon vous pouvez garantir que si ce code est exécuté, array1 sera faux et ne sera pas libéré. – Rudiger

+1

Il est parfaitement sûr d'envoyer la version à zéro. Vous n'avez jamais besoin de vérifier si un objet est nul avant de le relâcher. @ Les conseils de Rudiger sont bons. Cela vous empêchera d'envoyer une version à un objet déjà désalloué. – JeremyP

Répondre

6

Vous ne devriez pas être vérifier le nombre de conserver des objets sur Obj-C. Au mieux, ce nombre est à peine utile pour le débogage et, au pire, il est grossièrement trompeur. Si vous utilisez des techniques de gestion de la mémoire appropriées, vous n'aurez jamais besoin de vérifier le nombre de retenues.

Si vous avez des problèmes avec la gestion de la mémoire, postez plus de code et nous pourrons vous aider à localiser votre problème. Aussi, si vous n'avez pas lu ceci, vous devriez le faire.

http://developer.apple.com/library/mac/ipad/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html%23//apple_ref/doc/uid/20000994-BAJHFBGH

-3

Si la condition est correcte. en utilisant cela, vous pouvez vérifier si le tableau est en mémoire ou pas. Après avoir relâché le tableau, vous devez également attribuer zéro. Donc, il va supprimer entièrement de la mémoire.

Cheers, Raxit

+0

Affecter 'nil' ne" supprime pas entièrement de la mémoire ". – bbum

0

Malheureusement, vous avez besoin d'en savoir plus sur array1 autre que son retainCount et si elle est nil. Si vous pointez sur un objet qui a été publié ailleurs, l'appel retainCount peut faire planter votre programme ou renvoyer une vidange complète.


[J'ai supprimé mon commentaire sur autorelease - il a été mal informé. Ce qui précède reste toujours vrai!]

+0

Il n'y a pas de ramasse-miettes avec rétention/largage. L'ordre et le temps avec lesquels un objet est libéré et désaffecté est tout à fait déterminant. – bbum

+0

Désolé, relisez-vous sur autorelease pools et enlevé le peu de autorelease. Toujours en train de régler depuis la terre C#! URL pour les curieux: http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmAutoreleasePools.html – MechEthan