2010-10-29 7 views
-1

Est-ce que "new" est l'équivalent de "alloc init" ou "alloc init autorelease"?Sémantique de gestion de la mémoire de l'objectif C "nouveau"

Je n'arrive pas à le trouver dans un tutoriel ou un article traitant de la gestion de la mémoire Cocoa.

Merci pour votre avis.

+0

Voir http://stackoverflow.com/questions/719877/use-of-alloc-init-instead-of-new-objective-c –

Répondre

9

Comment sur this one. Lisez-les, comprenez-les, ils sont simples.

+3

+1 Veuillez s'il vous plait, lire le Guide de gestion de la mémoire pour le cacao. Puis relisez-le. –

+0

En outre, les documents sur «+ nouveau» dans celui-ci: http://developer.apple.com/library/mac/#documentation/cocoa/reference/foundation/Classes/NSObject_Class/Reference/Reference.html – JeremyP

3

new renvoie un objet avec un nombre de retenues de 1, tout comme [[alloc] init]. L'objet n'est pas auto-libéré.

1

+[NSObject new] est fonctionnellement équivalent à +[NSObject alloc] suivi de -[NSObject init] (c'est-à-dire [[alloc] init]).

Pour répondre à votre question, de la classe docs NSObject:

Si vous utilisez la mémoire gérée (non de collecte des ordures), cette méthode conserve l'objet avant de retourner il. L'objet renvoyé n'est pas libéré. L'appelant de cette méthode est responsable de la libération de l'objet retourné , en utilisant soit la libération , soit la libération automatique.

L'utilisation de new est rare dans le code Cocoa moderne. La plupart des développeurs de Cocoa préfèrent un code explicite et clair sur l'enregistrement de quelques traits de touches. Ainsi, alloc/init est préféré.

+1

Voici ce que la documentation Cocoa sur 'NSObject + new' dit: * Alloue une nouvelle instance de la classe réceptrice, lui envoie un message init, et retourne l'objet initialisé ... Cette méthode est une combinaison de alloc et init ... * Si c'est scandaleusement inexplicable, il ne peut y avoir beaucoup de choses explicites. – JeremyP

+0

@JeremyP Les documents ont été mis à jour depuis la dernière fois que j'ai regardé. –