2009-11-09 4 views
2

En Objective-C vous voyezQue signifie le message de conservation?

 
[object retain] ; 

Qu'est-ce que l'envoi d'un message à un objet retain signifie et pourquoi utiliseriez-vous un?

+0

Des instructions similaires et encore plus déroutantes comme .. '#warning BLAHBLAHBLAH renvoie un objet conservé sur des plates-formes non-IOS '. ce qui se traduit par un avertissement de l'analyseur comme .. 'Fuite potentielle d'un objet stocké dans 'BLAHBLAHBLAH' Super, maintenant quoi?!? –

Répondre

10

Fondamentalement, il est utilisé pour prendre la « propriété » sur un objet, soit en appelant à retenir, l'appelant prend la responsabilité de gérer la gestion de la mémoire de cet objet .

Deux usages très communs du haut de mon chapeau sont:

1- vous initiez un objet avec des méthodes gérées de mémoire automatique, mais veulent pendre autour du temps: someObject = [[someArray objectAtIndex:someIndex] retain], sans retenir l'objet sera autoreleased à un moment donné, vous ne contrôlez pas. 2- vous initiez un objet en lui passant un certainPointer, vous faites votre gestion de la mémoire et la libération d'appel sur somePointer, et maintenant somePointer traîne jusqu'à ce que l'objet nouvellement lancé le relâche, les appels d'objet retiennent sur somePointer et possède maintenant il.

-(id) initWithSomePointer:(NSObject *)somePointer_{ 

if(self = [super init]) 

somePointer = [somePointer_ retain]; 

return self; 

} 

.. 

.. 

[somePointer release]; 
+0

Comment identifiez-vous si un objet (tel qu'un tableau) sera auto-libéré une fois que votre variable handle sera hors de portée? – bobobobo

+0

ok. autre que celles allouées/initialisées, copiées ou conservées, toute affectation d'objet vous donnera une instance d'objet autoreleased: myString = [Chaîne NSstring ...] myArray = [NSArray arrayWith ....] myImage = [ Image UIImage ...] tous vous donner des instances autoreleased, donc ces objets seront autoreleased à un moment où vous ne contrôlez pas. Pour prendre le contrôle, vous pouvez appeler retenir sur eux et le relâcher en toute sécurité après que vous avez terminé. –

6

Augmente le nombre de références sur l'objet en question.

Voir this post pour plus de détails sur le comptage de référence Objectif C.

3

Lire Apple's memory management guide pour une explication complète et assez simple de tout à voir avec la gestion de la mémoire Cocoa. Je recommande fortement de lire cela plutôt que de dépendre d'un post sur Stack Overflow.

+0

+10 votes, si seulement je pouvais. –

Questions connexes