¿Cuál es la diferencia entre [Class new] y [[Class alloc] init] en iOS? [duplicar]


Posible Duplicado:
alloc, init y nuevo en Objective-C

Estoy un poco confundido acerca de [Class new] y [[Class alloc] init]. He definido 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, entonces ¿por qué usamos [[Class alloc] init] la mayor parte del tiempo, en comparación con [Class new]? Creo que debe haber alguna diferencia.

Amablemente explicar las diferencias, pros y contras de ambos?

Author: Community, 2012-06-29

3 answers

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

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

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

Release: Método de instancia de NSObject delegado. Disminuye el número de referencias del receptor.

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

Retain: Método de instancia del delegado NSObject. Incrementa el número de referencias del receptor.

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

Así que, para concluir podemos decir que

Alloc va con init

New = alloc + init

 127
Author: Shantanu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-29 05:03:35

El método +new es simplemente una abreviatura de +alloc y -init. La semántica de la 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, tendrá que usar los métodos +alloc y -initWith... en su lugar.

 26
Author: dreamlax,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-29 05:03:16

Aquí: alloc, init y nuevo en Objective-C

Básicamente es una cuestión de moderno versus tradicional. La ventaja más directa de init sobre new es que hay muchos métodos init personalizados.

 9
Author: O. Von Seckendorff,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:47:36