Différence entre NSArray.array / .new / @ / alloc-init

Il semble y avoir différentes methods d'instanciation de NSArrays (même chose pour NSDictionary et quelques autres).

Je connais:

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

Pour des raisons de lisibilité, je m'en tiens généralement à [NSArray array] , mais quelle est la différence entre tous ceux-ci, font-ils tous vraiment la même chose?

Le résultat est le même pour tous, vous obtenez un nouveau tableau immuable vide. Les différentes methods ont des implications différentes de memory management. En utilisant ARC, cela ne fait pas de différence à la fin, mais avant ARC, vous devriez utiliser la bonne version ou envoyer des messages appropriés de conservation, de libération ou de libération automatique.

[NSArray new] et [[NSArray alloc] init] renvoient un tableau avec un nombre de retenue +1. Avant l'ARC, vous devez libérer ou libérer automatiquement ce tableau ou vous pourriez perdre de la memory.

[NSArray array] et @[] returnnent un tableau déjà autoreleased (conserver le count 0). Si vous voulez qu'il rest sans ARC, vous devrez le conserver manuellement ou il sera libéré lorsque le pool autorelease actuel se triggersra.

  1. [NSArray array] : créer et returnner un tableau vide

  2. [NSArray new] : alloc , init et returnne un object NSArray

  3. @[] : Identique à 1.

  4. [[NSArray alloc] init] : Identique à 2.

Différent entre [NSArray array] et [[NSArray alloc] init] est s'il n'y a pas d'ARC:

  • [NSArray array] est un object autorelease. Vous devez appeler retain si vous voulez le garder. Par exemple, lorsque vous return un tableau.

  • [[NSArray alloc] init] est un object conservé. Donc vous n'avez pas besoin d'appeler retain plus si vous voulez le garder.

Avec ARC, ils sont identiques.