2010-04-11 19 views

Respuesta

11

"Gestionado" es un término de marketing que no tiene ningún significado técnico. El objetivo C para el iPhone no es basura, pero utiliza la administración de la memoria del recuento retenido. Entonces, en cierto sentido, debe hacer su propia gestión de memoria, pero se limita a conocer el Cocoa retain counting methodology.

Editar: Mis comentarios sobre "administrado" se refieren a un previous post version. El comentario se deja aquí porque estoy cansado de ver la palabra.

0

La respuesta no es específica de Objective-C. Si está desarrollando iPhone, no ... no hay un recolector de basura. Sin embargo, si está desarrollando Mac OSX, hay recolección de basura.

3

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

Cuestiones relacionadas