Wenn wir Speicher einer Klassenvariablen zuweisen, sollten wir sie freigeben oder in der Dealloc-Methode auf Null setzen? Was ist die beste Praxis?Release Vs nil - Best Practice
Antwort
Best Practice:
[foo release]; // ensures that memory is released
foo = nil; // ensures that there is no dangling pointer to released memory
Andere Anmerkungen:
Wenn Sie eine Eigenschaft zuweisen erklärt, behalten
// in your .h
@property (retain) MyObject *foo;
// in your .m
self.foo = bar; // bar is retained; whatever foo previously pointed at is released
wird es freigeben, was es vorher hinwies an und behalten Sie das neue Objekt, das zugewiesen wird.
So können Sie verwenden:
self.foo = nil;
und es wird freigeben, was foo auf hinwies. Jedoch wurde wenn Ihre Eigenschaft nicht deklariert wurde Retain Storage-Semantik, dies wird nicht implizit freigeben, worauf foo zeigte auf. Auch, wie Ryan darauf hingewiesen hat, kann eine Eigenschaft außer Kraft gesetzt werden, um Nebenwirkungen zu haben. Aus diesem Grund ist es am besten, um das Muster der immer mit folgen:
[foo release];
Um sicherzustellen, dass Sie nicht über einen baumelnden Zeiger auf freigegebenen Speicher haben, können Sie diese Follow-up mit:
foo = nil;
Wenn Sie mit behalten Semantik nicht mit Eigenschaften, Sie Notwendigkeit zu lösen, was in den variablen gespeichert wurde:
[foo release];
EDIT: Auch die folgende Antwort auf eine andere Frage sehen, dass dies erklärt:
Es ist sicherer, -release statt des Eigenschaften-Setter zu verwenden, da Setter außer Kraft gesetzt werden können, um Nebenwirkungen zu haben. Sie möchten nicht, dass Nebenwirkungen in Ihrer Dealloc-Methode auftreten. – Ryan
Danke Ryan - Ich habe meine Antwort bearbeitet, um das zu reflektieren. – Greg
Ausgezeichnet. Danke mein Herr!!! – Abhinav
- 1. VS Lösung, Projekte vs dlls Best Practice
- 2. Best Practice für Kontextprozessoren vs Template Tags?
- 3. Datum vs String-Manipulation Swift2 Best Practice
- 4. SQL SUBSTRING vs RECHTS - Best Practice
- 5. Hilfsklasse (n) vs funktionale Vererbung. Best Practice
- 6. Best Practice Guide: Schaukel
- 7. Best Practice von SingleOrDefault()
- 8. Java Enum best practice
- 9. BLL-Fehler Best Practice
- 10. IUnitOfWork Anleitung - Best Practice
- 11. Sql Benennung Best Practice
- 12. Best Practice verschiedene Listen
- 13. Suchergebnis Paginierung, Best Practice
- 14. Rails Validierung best practice
- 15. wenn Bedingung best practice
- 16. MVP-Entwurfsmuster best practice
- 17. C# Subclass Best Practice
- 18. Best Practice für Bilder
- 19. Repository Pattern Best Practice
- 20. Best Practice-Benutzerführung?
- 21. for loop best practice
- 22. Java-Schnittstelle Best Practice
- 23. Best Application Delegate Practice
- 24. Best Practice response.getOutputStream
- 25. cmake Best Practice
- 26. Binding Best Practice
- 27. C# Datenverbindungen Best Practice?
- 28. UIPickerview Best Practice?
- 29. angularjs Fabrik Best Practice
- 30. Swift Datencaching - Best Practice
können Sie klären, was Sie unter „Klassenvariable“? – ohhorob