web-dev-qa-db-fra.com

Quelle est la différence entre [Class new] et [[Class alloc] init] dans iOS?

Duplicata possible:
alloc, init et new dans Objective-C

Je suis un peu confus au sujet de [Class new] et [[Class alloc] init]. J'ai défini un objet content en utilisant [Class new] et [[Class alloc] init].

(1). NSMutableArray *content = [NSMutableArray new];
(2). NSMutableArray *content = [[NSMutableArray alloc] init];

Ma question concerne les différences entre [Class new] et [[Class alloc] init]. Pour moi, (1) et (2) sont similaires. Si (1) et (2) sont similaires, alors pourquoi utilisons-nous [[Class alloc] init] la plupart du temps, par rapport à [Class new]? Je pense qu'il doit y avoir une différence.

Veuillez expliquer les différences, les avantages et les inconvénients des deux?

68
Prasad G

Alloc: Méthode de classe de NSObject. Renvoie une nouvelle instance de la classe réceptrice.

Init: méthode d'instance de NSObject. Implémenté par des sous-classes pour initialiser un nouvel objet (le récepteur) immédiatement après l'allocation de mémoire pour lui.

Nouvea: méthode de classe de NSObject. Alloue une nouvelle instance de la classe réceptrice, lui envoie un message d'initialisation et renvoie l'objet initialisé.

Release: Méthode d'instance du délégué NSObject. Décrémente le nombre de références du récepteur.

Autorelease: Méthode d'instance du délégué NSObject. Ajoute le récepteur au pool de libération automatique actuel.

Retain: Méthode d'instance du délégué NSObject. Incrémente le nombre de références du récepteur.

Copy: Méthode d'instance du délégué NSObject. Renvoie une nouvelle instance qui est une copie du récepteur.

Donc, pour conclure, nous pouvons dire que

alloc va avec init

nouveau = alloc + init

130
Shantanu

Le +new la méthode est simplement un raccourci pour +alloc et -init. La sémantique de propriété est identique. Le seul avantage d'utiliser +new c'est qu'il est plus concis. Si vous devez fournir des arguments à l'initialiseur de la classe, vous devrez utiliser le +alloc et -initWith... méthodes à la place.

29
dreamlax

Ici: alloc, init et new dans Objective-C

Fondamentalement, c'est une question de moderne contre traditionnel. L'avantage le plus direct d'init par rapport à new est qu'il existe de nombreuses méthodes d'initialisation personnalisées.

9
Cehhiro