Hay dos opciones para los constructores en Objective C/Cacao:¿Por qué usaría un constructor de método de clase versus alloc/init?
1. Clase Constructor
Product *product = [Product productWithIdentifier:@"Chocolate"];
// Use product
2. Alloc/init Constructor
Product *product = [[Product alloc] initWithIdentifier:@"Chocolate"];
// Use product
[product release];
Lo que hago
- Tiendo a utilizar el método de clase solo porque se ve más limpio y no necesita una versión.
- Veo mucho alloc/init, ¿cuál es la ventaja de hacerlo de esta manera?
Mi pregunta
- Cuál es preferible? ¿O es solo una cuestión de gusto?
Código
Para el contexto, el producto de clase tendría la siguiente:
+(Product *)productWithIdentifier:(NSString *)identifier_ {
return [[[[self class] alloc] initWithIdentifier:identifier] autorelease];
}
-(Product *)initWithIndentifier:(NSString *)identifier_ {
self = [super init]
if (self) {
identifier = identifier_;
}
return self;
}
Tan cerca entre estas dos respuestas, pero esto es ligeramente mejor porque menciona el problema de la huella de memoria. Pero, de nuevo, la otra respuesta menciona "encadenar" llamadas juntas. ¡Ojalá pudiera elegir ambos! –
He subido la respuesta de sergio para casi compensar esto ;-) – DarkDust