2012-06-29 12 views
63

Duplicar posible:
alloc, init, and new in Objective-C¿Cuál es la diferencia entre [Clase nueva] y [[Clase alloc] init] en iOS?

estoy un poco confundido acerca de [Class new] y [[Class alloc] init]. Definí un objeto content usando [Class new] y [[Class alloc] init].

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

Mi pregunta es acerca de las diferencias entre [Class new] y [[Class alloc] init]. Para mí, (1) y (2) son similares. Si (1) y (2) son similares, ¿por qué usamos [[Class alloc] init] la mayor parte del tiempo, en comparación con [Class new]? Creo que debe haber alguna diferencia.

Explique amablemente las diferencias, pros & cons de both?

+1

puede hacer referencia a este enlace http://macresearch.org/difference -between-alloc-init-and-new – janusbalatbat

Respuesta

123

Alloc: Método de clase de NSObject. Devuelve una nueva instancia de la clase de recepción.

Init: Método de instancia de NSObject. Implementado por subclases para inicializar un nuevo objeto (el receptor) inmediatamente después de la memoria para que se haya asignado.

Nuevo: Método de clase de NSObject. Asigna una nueva instancia de la clase de recepción, le envía un mensaje de inicio y devuelve el objeto inicializado.

Versión: Método de instancia del delegado NSObject. Disminuye el conteo de referencia del receptor.

Autorelease: Método de instancia del delegado NSObject. Agrega el receptor al grupo de autorrelease actual.

Retener: Método de instancia del delegado de NSObject. Incrementa el recuento de referencias del receptor.

Copia: Método de instancia del delegado NSObject. Devuelve una nueva instancia que es una copia del receptor.

Para concluir podemos decir que

alloc va con init

nueva = + alloc init

+1

¡Genial! Eso fue útil! –

+0

Los delegados realmente no tienen nada que ver con esto. ¿Te refieres al protocolo 'NSObject' **? – dreamlax

9

aquí: alloc, init, and new in Objective-C

Básicamente se trata de una cuestión de moderna frente a la clásica. La ventaja más directa de init sobre new es que hay muchos métodos de inicio personalizados.

26

El método +new es simplemente una abreviatura de +alloc y -init. La semántica de propiedad es idéntica. El único beneficio de usar +new es que es más conciso. Si necesita proporcionar argumentos al inicializador de la clase, deberá usar los métodos +alloc y -initWith....

Cuestiones relacionadas