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?
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
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.
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.