No hay una función de recolección de basura. Sin embargo, cualquier objeto que copy
, retain
, alloc
etc. tiene su conteo de retención aumentado en uno, y usted es responsable de llamar a release
o autorelease
- usted posee una instancia de ese objeto. Si no llama al [<YOUROBJECT> release];
o [<YOUROBJECT> autorelease];
, el objeto permanece en la memoria del iPhone/iPod Touch/iPad, pero el puntero ya no permanece y se produce una pérdida de memoria, ya que no se puede acceder a ese bit de memoria. Autoreleasing agrega el objeto al grupo de autorrelease, y significa que se lanzará en algún momento en el futuro. Siempre use un estándar release
donde sea posible, ya que autorelease
significa que aún permanecerá en la memoria del dispositivo por un tiempo, nunca puede estar seguro de cuándo se lanzará, y es un método un poco más exigente para llamar.
Nunca llame al dealloc
en un objeto: liberar o autorrellenar es suficiente, y si es necesario, el objeto se desmantelará automáticamente.
Asegúrese de nunca liberar objetos que no son suyos, y si libera objetos, los suelta después de que ya no los use; de lo contrario, puede intentar acceder a ese objeto y el dispositivo no puede encontrarlos el objeto y la situación hace que la aplicación se bloquee debido a un error EXEC_BAC_ACCESS
; para descubrir la raíz del problema, abra Instruments, agregue el instrumento Object Allocation y habilite la detección de NSZombie en sus preferencias (o agregue el instrumento Zombies (solo disponible) en iPhone SDK 3.2+)). A continuación, puede ver el historial completo del objeto que causa el problema y saltar a la línea exacta de código que causó el problema.
Puede leer más here.
Espero que esto haya ayudado