Was ist der Unterschied zwischen Objective-C automatic reference counting und garbage collection?
Mit der neuen automatischen reference counting (ARC) eingeführt, in Xcode 4.2, wir müssen nicht mehr manuell verwalten, behalten /release in Objective-C.
Scheint dies ähnlich wie die garbage collection, wie in Objective-C auf dem Mac, und in anderen Sprachen. Wie funktioniert ARC unterscheiden sich von der garbage collection?
InformationsquelleAutor der Frage Gauging | 2011-10-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie, beschreibe ich in meiner Antwort hierARC, bieten die beste manuelle Speicherverwaltung und tracing garbage collection. Meist entfällt die Notwendigkeit für einen Entwickler zu verfolgen, manuelle behält, Versionen und autoreleases auf Objective-C-Objekte, und doch vermeidet die Notwendigkeit für einen garbage-collector-Prozess, können die knappen Ressourcen auf einem mobilen Gerät und führen gelegentlich stottert in einer Laufenden Anwendung.
BOGEN fügt die entsprechende behält und Freigaben erforderlich für reference counting zur compile-Zeit durch die Anwendung der Regeln, die alle Objective-C-Entwickler hatte über die Jahre. Dies befreit den Entwickler von der zu verwalten diese selbst. Denn die behält und release werden eingefügt zur compile-Zeit, keine Sammler Prozess ist notwendig, um kontinuierlich sweep-Speicher und entfernen Sie nicht referenzierte Objekte.
Einen leichten Vorteil, tracing garbage collection hat über ARC ARC nicht befassen sich mit behalten Zyklen für Siewo tracing garbage collection kann diese abholen.
Eine gute Lektüre zum Thema stammt von dieser thread auf apples Objective-C-mailing-Listewo Chris Lattner hat dies zu sagen:
Ich bin derzeit die Migration sowohl meinen Speicher manuell verwaltet Projekte, sowie diejenigen, die sich mit Objective-C garbage collection, zu BOGEN. Nach der Verwendung von garbage collection in ein paar Mac-Anwendungen für eine Weile jetzt, ich sehe einige deutliche Vorteile bei der Verschiebung dieser Projekte zu ARC.
InformationsquelleAutor der Antwort Brad Larson
ARC verlassen Sie sich auf einen compile-Zeit "referenzierte" Objekte, die es effizient in einem low-power-mode-Umgebungen (Mobile Endgeräte).
GC verlassen sich auf eine Laufzeit-basierte "erreichbar" Objekte, die es effizient in einer multi-threaded Umgebung.
Betrieb
ARC injiziert ein code in die ausführbare Datei ausgeführt werden "automatisch" auf nicht verwendete Objekte je nach Ihren Verweiszähler.
GC funktioniert in der runtime, wie es erkennt das nicht verwendete Objekt-Graphen (beseitigen behalten-Zyklen) und entfernen Sie Sie auf unbestimmte Zeit Abständen
Vorteile der Automatischen Referenz-Zählung
unbenutzt.
Vorteile der Speicherbereinigung (Garbage Collection
als Teil der regelmäßigen Anwendung fließen.
Nachteile der Automatischen Referenz-Zählung
Nachteile von Garbage Collection
Veröffentlichungen unbestimmt ist.
vorübergehend auf Eis gelegt.
InformationsquelleAutor der Antwort Meseery
ARC ist eine form der garbage collection.
Du meinst wohl "was ist der Unterschied zwischen ARC und tracing garbage collection (wie die JVM und .NET)?". Die wichtigsten Unterschiede sind, dass der BOGEN langsamer und Lecks Zyklen. Das ist, warum die JVM und .NET verwenden beide tracing garbage collectors. Für mehr Informationen, Lesen Sie bitte Wie reference counting und tracing garbage collection vergleichen?.
InformationsquelleAutor der Antwort Jon Harrop
die Antwort kurz und bündig wie folgt:
GC von java ist die Laufzeit, während der ARC ist die Kompilierzeit.
GC Verweis auf die Objekte zur Laufzeit, und überprüfen Sie die Abhängigkeiten der Objekt-Laufzeit.
Während ARC angehängt, release, retain, autorelease-Aufrufe zur compile-Zeit.
InformationsquelleAutor der Antwort objectivecdeveloper