In vielen Büchern und auf vielen Seiten sehe ich -drain. Nun, für einen Autorelease-Pool, der cool klingt. Aber macht es etwas anderes als eine Veröffentlichung? Ich würde meinen, drain macht den Pool einfach dazu, all seine Objekte freizugeben, ohne den Pool selbst freizugeben. Nur eine Vermutung.Was ist der Unterschied zwischen dem Senden-Release oder -Drain zu einem Autorelease-Pool?
Antwort
Beachten Sie, dass die Kommentare zur Sauerstoffantwort, die besagt, dass -Drain den NSAutoreleasePool nicht freigibt, nicht korrekt sind. Die documentation for NSAutoreleasePool sagt eindeutig, dass -Drain den NSAutoreleasePool freigibt (und damit zerstört).
-drain ist ein Ersatz für die Verwendung von -freigabe für NSAutoreleasePool-Objekte, der einzige Unterschied ist, dass ein Hinweis auf das Garbage Collection-System bietet.
Wenn Ihr System eine Garbage Collection hat, dann Nachricht -Drain senden (objc_collect_if_needed) für GC
Wenn Sie nicht GC haben, dann abtropfen lassen = Release
also würde ein -drain auch den Pool selbst freigeben, oder? – Thanks
-retain und -Drain-Methoden nicht ändert retainCount von NSAutoreleasePool Objekt Sie nur Freigabemeldung im Pool auf alle Objekte senden Ich weiß nicht, wie und wann NSAutoreleasePool Objekte verwüstete ((( – oxigen
Nein, abtropfen lassen das entbindet Pool Es gibt keine Magie, wenn es um Autorelease-Pools und behalten zählt, sie folgen den gleichen Regeln wie jedes andere Objekt außer sie können nicht behalten oder Autoreleased sein (was sowieso nicht viel Sinn machen würde) –
Oxigen richtig ist, die Dokumentation für die Methode sehen drain
von NSAutoreleasePool:
In einer Referenzzählung Umgebung, Mitteilungen und knallt den Hörer; in einer Garbage-Collected-Umgebung löst Garbage Collection aus, wenn der Speicher, der seit der letzten -Auflistung zugeordnet wurde, größer ist als der aktuelle -Schwellenwert.
- 1. @autoreleasepool in Schleife oder Schleife in @autoreleasepool?
- 2. Was ist der Unterschied zwischen einem Mixin und dem Dekorationsmuster?
- 3. Was ist der Unterschied zwischen einem Controller und einem Service?
- 4. Was ist der Unterschied zwischen dem WebConfigurationManager und dem ConfigurationManager?
- 5. Was ist der Unterschied zwischen dem Standard- und dem Standardkonstruktor?
- 6. Was ist der Unterschied zwischen dem Betriebssystem und dem Kernel?
- 7. Was ist der Unterschied zwischen:
- 8. Was ist der Unterschied zwischen einem Helfer und einem Teil?
- 9. Was ist der Unterschied zwischen einem ViewModel und einem Controller?
- 10. Was ist der Unterschied zwischen einem Algorithmus und einem Entwurfsmuster
- 11. Was ist der Unterschied zwischen dem [OptionalField] und [NonSerialized]
- 12. Was ist der Unterschied zwischen `==` und `ist`?
- 13. Was ist der Unterschied zwischen einem RoutedCommand und einem RoutedUICommand?
- 14. Was ist der Unterschied zwischen einem Anwendungscontroller und einem Anwendungskontext?
- 15. Was ist der Unterschied zwischen einem Key und einem KeySpec?
- 16. Was ist der Unterschied zwischen Ember.computed.alias und einem Ember.binding?
- 17. Was ist der Unterschied zwischen einem Index und einem Fremdschlüssel?
- 18. Was ist der Unterschied zwischen einem Muster und einem Pfad?
- 19. Was ist der Unterschied zwischen einem Primärschlüssel und einem Ersatzschlüssel?
- 20. Was ist der Unterschied zwischen einem Integrator und einem Tiefpassfilter?
- 21. Was ist der Unterschied zwischen einem Streamwriter und einem Binarywriter?
- 22. Was ist der Unterschied zwischen einem Domänenklassendiagramm und einem Designklassendiagramm?
- 23. Was ist der Unterschied zwischen einem Tupel und einem compressed_pair?
- 24. Was ist der Unterschied zwischen einem Klassendiagramm und einem Objektdiagramm?
- 25. Was ist der Unterschied zwischen einem Iterator und einem Generator?
- 26. Was ist der Unterschied zwischen einem Array und einem Objekt?
- 27. Was ist der Unterschied zwischen einem Tabellenindex und einem Ansichtsindex?
- 28. Was ist der Unterschied zwischen einem Nanokern und einem Exokernel?
- 29. Was ist der Unterschied zwischen einem Workflow und einem Flowchart?
- 30. Was ist der Unterschied zwischen einem Instanzinitialisierer und einem Konstruktor?
Danke. Also, auf iPhone OS ist es besser, -release statt -drain zu verwenden? – Thanks
In einer Nicht-GC-Umgebung sind sie gleich. Außer in dem seltenen Fall, dass Sie aus irgendeinem Grund dem GC-System keinen Hinweis geben möchten, wenn der Code jemals im GC-Modus verwendet wurde, gibt es keinen Grund, in Code-Targeting 10.4+ Release statt Drain zu verwenden. – smorgan
Apple verwendet-Release für den ARP in der main() -Funktion ... – Thanks