alguien me puede decir la diferencia en declarar una matriz mutable con:

NSMutableArray *array = [NSMutableArray array];

y

NSMutableArray *array = [[NSMutableArray alloc] init];

Porque al principio yo estaba declarando a todos mis matrices con alloc, y si al final de una función que me devuelve la matriz creada con alloc, tuve que grupo de liberación automática de la matriz, debido a problemas de pérdida de memoria.

Ahora el uso de la primera declaración no necesito liberar cualquier cosa.

Gracias

InformationsquelleAutor Adelino | 2011-03-24

2 Comentarios

  1. 31

    Porque al principio yo estaba declarando a todos mis matrices con alloc y si al final de una función que me devuelve la matriz creada con alloc tuve que grupo de liberación automática de la matriz, debido a problemas de pérdida de memoria. Ahora el uso de la primera declaración no necesito liberar cualquier cosa

    Que es exactamente correcta cuando «vender» un objeto. Pero en otros casos, cuando se crea un objeto en iOS, donde usted tiene la opción entre la obtención de un ready-made autoreleased objeto y llamar a alloc seguido por el lanzamiento, Apple quiere que usted use asignación y liberación, porque mantiene la vida del objeto corto y bajo su control.

    El problema aquí es que autoreleased objetos de vivir en el grupo de liberación automática de la piscina y se pueden acumular hasta que la piscina está agotado, cuando quiera que sea.

    Otra cosa a tener en cuenta es bucles. Usted puede generar autoreleased objetos sin ser conscientes de ello, y que sólo se acumulan en la piscina. La solución es crear tu propio grupo de liberación automática de la piscina en el inicio del bucle y la liberación en el final del bucle, por lo que los objetos son lanzados cada momento a través del bucle.

    EDITAR – 12/18/2011: Pero con iOS 5 y con la venida de ARCO, el grupo de liberación automática mecanismo es mucho más eficiente, y no hay tal cosa como release, de manera que la distinción entre alloc-init y una comodidad constructor expendedoras de un autoreleased objeto se convierte en irrelevante. (También es ahora un @autoreleasepool bloque en lugar de un grupo de liberación automática de la piscina (pseudo-)objeto).

    • Debo añadir que yo he escrito un libro sobre programación en iOS, y si estás empezando en esto, la administración de memoria capítulo podría ser útil para usted. Explica los detalles de lo que usted está preguntando acerca de aquí: apeth.com/iOSBook/ch12.html
    • Un gran consejo +1
    • +1 :de acuerdo con BoltClock
    • El término «vender» se utiliza generalmente en el Cacao a significar «hacer disponible a través de PDO.» ¿Qué quieres decir aquí?
    • Creo que por «vender» aquí matt significa devolver un objeto para ser utilizado en otros lugares, él estaba diciendo que es correcto para regresar un objeto autoreleased, en oposición a cuando uno es el uso de un objeto dentro de su propio método, en cuyo caso él estaba recomendando alloc/init.
    • FYI, el PDO mencionado en otro comentario es Portable Distributed Objects para llamar a los objetos a través de una red. en.wikipedia.org/wiki/Portable_Distributed_Objects

  2. 36

    La array método de la clase por sí mismo produce un autoreleased de la matriz, lo que significa que no tienen que (y no debe) liberar manualmente.

    • Así que está bien utilizar el primer método?
    • Sí, siempre y cuando no se envía un mensaje de liberación.
    • Bueno, @BoltClock aquí en realidad responde a la pregunta…
    • +1 para responder a la pregunta.
    • qué necesito para utilizar con ARCO?

Dejar respuesta

Please enter your comment!
Please enter your name here