2010-02-03 7 views
3

L'un ou l'autre ou les deux pointeurs de date nécessitent une [version] lorsque j'en ai fini avec eux. Comment pourrais-je le savoir? Je ne suis pas sûr car je ne fais pas init explicitement.Comment savoir quand libérer un objet NSDate?

NSDate *date = [NSDate date]; 

NSDate *date = [dateWithTimeIntervalSince1970:100000000]; 

Répondre

5

Les deux sont autoeleased, c'est-à-dire que vous n'avez pas besoin de les libérer vous-même. La règle de base est que vous possédez un objet si vous envoyez + alloc ou -copy ou conserver explicitement:

  • [[SomeClass alloc] ... initialisation]
  • [copie someObject]
  • [ certains objets retiennent]

Si vous possédez un objet, vous devez le valider. + new est un raccourci vers + alloc et -init.

+0

Ok, mais est-il incorrect de le libérer? Quand sera-t-il publié si je ne le fais pas explicitement? – glutz78

+0

Oui, il est faux de libérer un objet que vous ne possédez pas. Ceci est appelé "over-releasing" et provoquera un crash quand -release (ou tout autre message, d'ailleurs) est envoyé à un objet déjà libéré. Les objets libérés sont réellement libérés lorsque NSAutoreleasePool est libéré/drainé (si vous ne les utilisez pas explicitement, cela se produit à la fin de chaque cycle de la boucle d'événement). Voir "Guide de programmation de gestion de mémoire pour Cocoa". – Costique

5

Non, les deux dates renvoyées par ces méthodes sont auto-libérées. Vous n'avez pas besoin de vous soucier de la gestion de la mémoire, bien que pour être un bon citoyen, mettre le pointeur à zéro quand vous en avez fini avec eux serait une bonne idée.

En règle générale, vous pouvez suivre ce que j'appelle la règle "CARN". dans Cocoa/Cocoa Appuyez sur n'importe quelle méthode qui a les mots Copier, Alloc, Retain, ou Nouveau dans ces objets renverront des objets qui doivent être libérés par vous à un moment donné. Ces conventions de dénomination sont appliquées aux méthodes qui renvoient des objets avec un nombre de retenues de +1. La classe qui appelle ces méthodes "possède" l'objet et est responsable de le libérer quand il en a fini avec elle.

Espérons que cela aide.

Questions connexes