Los apuntadores se utilizan para mantener la dirección de la memoria asignada. Cuando crea un objeto en cocoa, asigna memoria y almacena la dirección en puntero.
BOOL, char, int almacenar el valor.
Cuando se crea una clase del alloc asigna memoria por lo que necesita para almacenar un puntero a la memoria para poder acceder a ella:
NSMutableArray * arr = [[NSMutableArray alloc] init];
¿Cómo los tipos C se limpiaron de la memoria?
Los tipos "simples" se asignan en la pila. Cuando se llama a un método, se asigna un espacio en la pila para contener todas las variables de método (más algunas otras cosas como parámetros y dirección de retorno, etc.). Entonces la pila crece Una vez que el método retorna, la pila se reduce y el espacio que utilizó el método ahora se reclama, así que sí, los tipos simples se "limpiarán".
En realidad es mucho más simple de lo que parece. Eche un vistazo a wikipedia Stack entry - section Hardware stacks para más detalles para satisfacer su curiosidad.
Cuando "asigna memoria" esa memoria se asigna en el montón. Heap está ahí para la ejecución completa de su aplicación. Una vez que asigna la memoria en un montón, obtiene una dirección para esa memoria: almacena esta dirección en punteros. Puntero es solo una variable que almacena la dirección de memoria.
Cuando su método retorna ya no tiene acceso a sus variables 'simples' declaradas dentro del método (por ejemplo, BOOL, int, char, etc.) pero la memoria en el montón todavía está allí. Si aún tiene la dirección de la memoria (por ejemplo, el puntero), puede acceder a ella.
¿Qué pasa con las variables de instancia de tipo 'simple' (editar: ¿objeto interior?)?
Cuando crea un objeto (estamos hablando de objetivo C y Cocoa aquí) y le asigna espacio para todo el objeto.El tamaño del objeto es el tamaño de todas sus variables (no estoy seguro de si obj-c agrega otras cosas). Entonces, las variables de instancia son parte de la memoria de objeto en Heap. Cuando sueltas/borras objetos su memoria es recuperada y ya no tienes acceso a las variables que están almacenadas dentro del objeto (en obj-c llamas liberación, cada objeto guarda conteo de referencias, cuando el recuento de referencias llega a 0 el objeto es desasignado - el la memoria en el montón es recuperada).
Gracias por su respuesta. Esto me deja preguntando ahora, ¿cómo se limpian los tipos C de la memoria? ¿Se hace bajo el capó Objective-C? – Meroon
Las variables de instancia del objeto están todas contenidas dentro de la memoria del objeto. Todos desaparecerán cuando se libere la memoria del objeto. La diferencia con las variables de tipo objeto es que son punteros, lo que significa que la variable en sí misma apunta a un lugar en la memoria. Incluso si la variable del puntero desaparece, la memoria a la que apunta sigue asignada. – Chuck
No olvide que algunas veces en los archivos de cabecera, Apple ha configurado typedefs para estructuras donde siempre se refiere a ellas con un puntero. En ese caso, el nombre termina en "Ref". p.ej. CGImageRef que es un typedef de CGImage *. Cuando vea que no coloca su propio * en el nombre de la variable. – U62