Unterschied zwischen NSArray.array / .new / @ [] / alloc-init

7

Es scheint verschiedene Methoden zu geben, NSArrays zu instanziieren (dasselbe gilt für NSDictionary und einige andere).

Ich weiß:

  1. [NSArray array]
  2. [NSArray new]
  3. @[]
  4. [[NSArray alloc] init]

Aus Gründen der Lesbarkeit bleibe ich normalerweise bei [NSArray array] , aber was ist der Unterschied zwischen all diesen, machen sie alle dasselbe?

    
MarkHim 23.10.2015, 07:40
quelle

2 Antworten

11

Das Ergebnis ist für alle gleich, Sie erhalten ein neues leeres unveränderliches Array. Die verschiedenen Methoden haben jedoch unterschiedliche Auswirkungen auf das Speichermanagement. Mit ARC macht das am Ende keinen Unterschied, aber vor ARC müssten Sie die richtige Version verwenden oder entsprechende Retain-, Release- oder Autorelease-Nachrichten senden.

[NSArray new] und [[NSArray alloc] init] geben ein Array mit +1 Retain-Anzahl zurück. Vor ARC müssten Sie das Array freigeben oder automatisch freigeben oder Speicher verlieren.

[NSArray array] und @[] geben ein bereits automatisches Array zurück (Retain Count 0). Wenn Sie möchten, dass es ohne ARC bleibt, müssen Sie es manuell beibehalten oder es wird aufgehoben, wenn der aktuelle Autorelease-Pool geöffnet wird.

    
Sven 23.10.2015, 08:00
quelle
7
  1. [NSArray array] : Erstellt ein leeres Array und gibt es zurück

  2. [NSArray new] : alloc , init und geben ein NSArray -Objekt

  3. zurück
  4. @[] : Wie 1.

  5. [[NSArray alloc] init] : Wie 2.

Der Unterschied zwischen [NSArray array] und [[NSArray alloc] init] ist, wenn nicht-ARC vorhanden ist:

  • [NSArray array] ist ein Autorelease-Objekt. Sie müssen retain aufrufen, wenn Sie es behalten möchten. ZB wenn Sie return ein Array.

  • [[NSArray alloc] init] ist ein beibehaltenes Objekt. Sie müssen also retain nicht mehr aufrufen, wenn Sie es behalten möchten.

Mit ARC sind sie gleich.

    
anhtu 23.10.2015 07:49
quelle

Tags und Links