Lanzamiento de objetivo C, autorelease y tipos de datos

Soy nuevo en el código administrado por memoria, pero tengo la idea bastante bien.

Al pasar mi aplicación a través de la herramienta de fugas en XCode, noté que solo tenía que limpiar mis objetos personalizados, pero no arrays creados dinámicamente, por ejemplo, así que pensé que esos tipos de datos son liberados automáticamente, tiene sentido ya que solo tuve que liberar los arrays. Utilicé como propiedades que tenían un (retener) en ellos.

Entonces noté algo peculiar: estaba goteando una cierta matriz inicializada de esta manera:

NSMutableArray *removals = [NSMutableArray new];

pero no similar

NSMutableArray *removals = [NSMutableArray arrayWithCapacity:9];

Ahora, la razón por la que uno se configuró con "nuevo" es que podría tener de 0 a 99 elementos, mientras que el otro sabía que siempre iba a ser 9. Ya que ambas matrices se pasan al mismo método más adelante, según el usuario. interacción, me estaba saliendo una fuga si no lo liberé al final del método, o una excepción si lo hice.

Cambié la primera matriz a

NSMutableArray *removals = [NSMutableArray arrayWithCapacity:99];

Y no tengo fugas y no tengo que liberar nada. ¿Alguien puede explicar?

Respuestas a la pregunta(3)

Su respuesta a la pregunta