10 Stimmen

Unterschied zwischen ARC und MRC

Ich bin mit dem Apple-Material verwirrt.

Es gibt 3 Möglichkeiten, das Gedächtnis zu verwalten, nämlich :

  1. automatische Referenzzählung.
  2. manuelle Referenzzählung.
  3. Müllsammeln.

Ich frage mich, worin der Unterschied zwischen der automatischen Referenzzählung und der manuellen Referenzzählung besteht.

Kann mir das jemand erklären?

16voto

Inder Kumar Rathore Punkte 38280

In ARC müssen Sie den von Ihnen zugewiesenen Speicher nicht freigeben, während Sie dies im Falle der manuellen Eingabe selbst tun müssen. z.B. manueller Fall

-(void)someMethod
{ 
    NSMutableArray *arr = [[NSMutableArray alloc] init];
    //use array
    [arr release]; //when array is in no use
}

ARC-Fall

-(void)someMethod
{
    NSMutableArray *arr = [[NSMutableArray alloc] init];
    //use array
}

4voto

Ankit Srivastava Punkte 12216

In ARC kümmert sich das Betriebssystem um die Speicherverwaltung, so dass Sie sich nicht um das Freigeben der Objekte kümmern müssen. Für Anfänger ist das ziemlich praktisch. Bei der manuellen Zählung hingegen müssen Sie die Freigabe des Speichers im Auge behalten, und wenn Sie es nicht richtig machen, stürzt Ihre Anwendung ab. ARC und MRC sind in ios verfügbar, während Garbage Collection auf MAC-OSX beschränkt ist - ich hoffe, das hilft. Inder hat ein gutes Beispiel gegeben.

0voto

gabrielrf97 Punkte 187

In MRC waren Sie dafür verantwortlich, den Überblick zu behalten und dafür zu sorgen, dass alle Referenzen von Objekten ordnungsgemäß inkrementiert, dekrementiert und deallokiert wurden. In Obj-C gibt es im Grunde eine Reihe von Regeln, die verhindern sollen, dass es zu Speicherlecks oder "Dangling Pointers" kommt, und es war ein beträchtlicher Aufwand, dafür zu sorgen, dass alles einwandfrei funktioniert, und das hätte man auch automatisieren können, wie es bei anderen Sprachen der Fall war.

Das ist der Moment, in dem ARC ins Spiel kommt.

ARC kam als einschneidende Alternative zu der Art und Weise, wie die Dinge mit MRC funktionierten. Mit ARC werden Instanzen freigegeben, wenn es keine starke Referenz auf sie gibt, und jede Instanz verfolgt die Anzahl der starken und schwachen/unbesetzten Referenzen auf sich selbst. Obwohl es wie ein ähnliches Verhalten aussehen mag, ist der Aufwand in beiden Fällen sehr unterschiedlich. In MRC musste man alles im Auge behalten, während man in ARC nur Retain-Zyklen vermeiden sollte.

Einige Unterschiede zwischen ARC und Garbage Collector sind:

  • Der Garbage Collector ist Teil der Laufzeitstruktur. In ARC übernimmt der Swift-Compiler die Codebereinigung und das Einfügen der Referenzverfolgung in Ihr App-Bundle.
  • Der Garbage Collector fordert den Speicher nicht zurück, sobald die Instanz ihre Referenzen verliert, sondern ARC.
  • Wenn einige Objekte Zyklus (oder Graph) hat Verweise auf sich selbst, sondern sind nicht zugänglich durch die Root-Knoten, GC kann das Loch Graph zu reinigen, während in ARC sie nie deallocated bekommen würde, weil sie starke Verweise auf sie andere (behalten Zyklus) zu halten.

Wenn Sie weitere Informationen suchen, finde ich diesen Artikel sehr hilfreich: https://swift007blog.wordpress.com/2017/01/14/what-is-arc-in-ios/

0voto

yoAlex5 Punkte 20661

MRC vs. ARC

ARC Einsätze retain , release , autorelease anstelle von Entwickler in Kompilierzeit . Jetzt müssen Sie sich nicht mehr um die manuelle Speicherverwaltung kümmern

[Unter der Haube]

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X