Un libro para acerca de la programación iPhone instancia clases como esto:alloc, inicio y nuevo en Objective-C
[[Class alloc] init]
Otro libro sobre Objective-C hace como este:
[Class new]
Lo que es ¿la diferencia?
Un libro para acerca de la programación iPhone instancia clases como esto:alloc, inicio y nuevo en Objective-C
[[Class alloc] init]
Otro libro sobre Objective-C hace como este:
[Class new]
Lo que es ¿la diferencia?
Originalmente en Objective-C, los objetos se crearon con nuevos. A medida que evolucionó el marco OpenStep/Cocoa, los diseñadores desarrollaron la opinión de que asignar memoria para un objeto e inicializar sus atributos eran preocupaciones separadas y por lo tanto deberían ser métodos separados (por ejemplo, un objeto podría asignarse en una zona de memoria específica). Por lo tanto, el estilo alloc-init de la creación de objetos se hizo popular.
Básicamente, lo nuevo es viejo y casi, pero no del todo obsoleto: por lo tanto, verás que las clases de Cocoa tienen muchos métodos de inicio pero casi nunca ningún método nuevo personalizado.
Podría mostrar o citar dónde + nuevo es "casi-pero-no-bastante obsoleto". Me gustaría tener la información antes de hablar con colegas. – acarlow
Lo uso como atajo cuando lo único que quiero hacer es llamar a 'alloc' /' init'. – Rivera
¿Qué pasa con [NSMutableDictionary dictionary]; – abhi1992
Depende de la clase, pero [Class new]
es muy probablemente un método de conveniencia que llame internamente al [[Class alloc] init]
. Por lo tanto, no puede llamar a otros métodos de inicio como "initWithString".
"alloc" crea una nueva ubicación de memoria pero no la inicializa en comparación con "nueva". –
Como ya se mencionó, por defecto no hay diferencia. Pero puede sobrescribir el método de clase new
. Apple's documentation tiene algunas ideas sobre esto.
A diferencia alloc, nueva es a veces re-implementado en subclases para invocar una inicialización método específico de clase [...] A menudo ... nuevos métodos hacer algo más que solo la asignación y la inicialización .
No veo el extracto en su enlace. ¿Podría ubicar su fuente, por favor? – acarlow
Obviamente, Apple ha actualizado los documentos y eliminado ese párrafo. Puede encontrar copias de versiones anteriores en la web (no estoy seguro sobre derechos de autor ...) – user123444555621
+new
se implementa literalmente como:
+ (id) new
{
return [[self alloc] init];
}
Nada más y nada menos. Las clases pueden anularlo, pero eso es muy atípico a favor de hacer algo como +fooWithBar:
.
¿Qué pasa con '[NSMutableDictionary dictionary];' – abhi1992