Soy un novato de iPhone/Objective-C con un extenso fondo Java.NSMutableArray arrayWithCapacity vs initWithCapacity
estoy aprendiendo más sobre la gestión de memoria en Objective-C y estoy leyendo la documentación de Apple sobre la gestión de la memoria: http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html
En la sección de Política de la propiedad de objetos, se dice que es el propietario de cualquier objeto creado a través de una método que comienza con alloc, new o contains copy. La propiedad implica que necesita explícitamente release
el objeto cuando haya terminado con él.
lo que estoy buscando en la documentación NSMutableArray: http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSMutableArray_Class/Reference/Reference.html
Hay dos métodos que más o menos hacen lo mismo ... que ambos crean una matriz con una cierta capacidad inicial. Uno es un método de clase y el otro es un método de instancia.
+ (id)arrayWithCapacity:(NSUInteger)numItems;
- (id)initWithCapacity:(NSUInteger)numItems;
Ahora es el perezoso desarrollador de Java que soy, ¿por qué alguna vez elegir el método de instancia sobre el método de clase sabiendo que en algún momento en el tiempo que tengo que limpiar después de mí?
Supongo que me puede estar faltando un punto fundamental aquí ... ¿es simplemente cuestión de determinar cuando se libera el objeto? autorelease
en el método de clase vs. release
en el método de instancia? Supongo que en una plataforma con recursos muy limitados (iPhone) debo abstenerme de utilizar el método de clase y liberar el objeto tan pronto como haya terminado con él.
Gracias!
¿Es esto cierto más ahora que tenemos recuento automático de referencias? Me parece que los dos métodos deben ser bastante idénticos ahora, ya que el código ARC básicamente aplica una liberación automática implícita al objeto alloc/init creado ahora. Se vería que en la mayoría de los casos deberíamos usar los métodos de conveniencia ahora si esto existe por simplicidad y claridad, ya que no hay ninguna penalización de rendimiento para nadie, si entiendo esto correctamente. – Mike