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