Lorsque nous assignons de la mémoire à une variable de classe, devrions-nous la libérer ou la mettre à zéro dans la méthode dealloc? Quelle est la meilleure pratique?release Vs nil - Meilleure pratique
Répondre
Les meilleures pratiques:
[foo release]; // ensures that memory is released
foo = nil; // ensures that there is no dangling pointer to released memory
Autres notes:
Lorsque vous attribuez à une propriété déclarée à retenir,
// in your .h
@property (retain) MyObject *foo;
// in your .m
self.foo = bar; // bar is retained; whatever foo previously pointed at is released
il publiera ce qu'il pointait précédemment et conserver le nouvel objet assigné.
Ainsi, vous pouvez utiliser:
self.foo = nil;
et il libérera tout ce que foo pointait. Toutefois, si votre propriété n'a pas été déclarée comme ayant une sémantique de stockage de conservation, cela ne libérera pas implicitement tout ce que foo pointait. En outre, comme Ryan l'a souligné, une propriété peut être surchargée pour avoir des effets secondaires. Pour cette raison, il est préférable de suivre le modèle de toujours utiliser:
[foo release];
Pour vous assurer que vous ne disposez pas d'un pointeur ballants à la mémoire libérée, vous pouvez suivre ce avec:
foo = nil;
Si vous n'utilisez pas des propriétés avec garder la sémantique, vous besoin de libérer tout ce qui était stocké dans la variable:
[foo release];
EDIT: Voir aussi la réponse suivante à une autre question qui explique ceci:
Il est préférable de toujours utiliser -release au lieu de l'accesseur de propriété, car les setters peuvent être remplacés par des effets secondaires. Vous ne voulez pas d'effets secondaires dans votre méthode dealloc. – Ryan
Merci Ryan - J'ai édité ma réponse pour refléter cela. – Greg
Excellent. Merci Monsieur!!! – Abhinav
- 1. VS Solution, projets vs dlls meilleure pratique
- 2. SQL SUBSTRING vs RIGHT - Meilleure pratique
- 3. Meilleure pratique: CheckBox DataBindings vs événement CheckedChanged
- 4. self.prop = nil; vs. [libération de prop], prop = nil;
- 5. C# Debug vs Release
- 6. iPhone, méthode pratique ou Alloc/Release?
- 7. Meilleure pratique pour nettoyer la mémoire des applications iPhone?
- 8. WordPress 2.9.2 VS WordPress 3.0 Release Candidate
- 9. Single SignOn - Meilleure pratique
- 10. Dojo Layers meilleure pratique
- 11. Webapp meilleure pratique template_dict
- 12. cmake meilleure pratique
- 13. SQL Select Meilleure pratique
- 14. Classes d'organisation - Meilleure pratique?
- 15. Meilleure pratique pour l'idiome de référence scopé?
- 16. Meilleure pratique: Scripts intersites légitimes
- 17. Meilleure pratique d'utilisation de org.apache.commons.logging.LogFactory.getLog
- 18. Meilleure pratique pour Java IPC
- 19. meilleure pratique pour l'interrogation d'annuaire
- 20. Meilleure pratique SCRIPT Installation DataBase
- 21. Meilleure pratique des délégués d'application
- 22. printemps mvc @requestmapping meilleure pratique
- 23. Meilleure pratique de test SQL
- 24. Meilleure pratique définie par l'utilisateur
- 25. Meilleure pratique pour cftry/cfcatch
- 26. Meilleure pratique utilisateur SQL Server
- 27. Générer des formulaires, meilleure pratique
- 28. Meilleure pratique pour l'envoi ItemsSource
- 29. Objective-C @class/importer la meilleure pratique
- 30. Javascript bonne pratique - onclick vs discret
pouvez-vous préciser ce que vous entendez par "variable de classe"? – ohhorob