2010-07-26 19 views

Respuesta

3

De los 4 métodos que ha mencionado, normalmente solo usará release y autorelease en Object-C. free se puede usar cuando haya usado c y malloc; de lo contrario, debe usar release y autorelease.

dealloc no debe ser llamado por ninguno de sus códigos, ya que puede interferir con el ciclo de retención/liberación que Object-C utiliza para realizar un seguimiento de los recursos. El uso de dealloc casi con seguridad provocará fallas en el tiempo de ejecución si alguna vez lo usa.

El último recurso del uso de la release y autorelease es el Apple memory management documentation

3
  • free es lo contrario de malloc y se usa en C. Es probable que no vamos a usar mucho la programación en Objective C
  • Si posee un objeto, release cuando haya terminado con él
  • También puede autorelease un objeto. Esto lo libera automáticamente al final de la iteración del ciclo de ejecución actual
  • Cuando el recuento de referencias en un objeto cae a cero, el tiempo de ejecución llama al dealloc. No se debe llamar a este método usted mismo

usted "propia" de un objeto si alloc, new, retain o copy ella.

Apple proporciona some good documentation en esto.

+1

Punto 3: Lo llamaría "iteración de ciclo de ejecución" en lugar de "ciclo de ejecución". Punto 4: Ciertamente, quisiste decir "dealloc" en lugar de "liberar", ¿no? (lo siento, nitpicking) – Dirk

+0

Muchas gracias. Eso fue definitivamente útil. – ar106

+0

@Dirk Buen lugar. Fijo. –

17

free() es una función C que utiliza para deshacerse de la memoria que ya no necesita, obtenida a través de malloc() u otra función que está documentada para requerir free() para desasignar su memoria, p. strdup().

-dealloc es un selector Objective-C enviado por Objective-C runtime a un objeto cuando el objeto ya no es propiedad de ninguna parte de la aplicación.

-release es el selector que se envía a un objeto para indicar que se está renunciando a la propiedad de ese objeto. Una vez que un objeto no es propiedad de nadie, se envía el mensaje -dealloc por el tiempo de ejecución.

-autorelease es un selector que se envía a un objeto para indicar que se está renunciando a la propiedad del objeto. Sin embargo, si ahora nadie posee el objeto, se aplazará el -dealloc final hasta algún punto posterior no especificado. De hecho, lo que realmente está haciendo es transferir su propiedad a un grupo de liberación automática que luego la liberará cuando se libere (o agote).

Nunca debe enviar -dealloc a un objeto excepto a super en el propio método -dealloc del objeto.

Cuestiones relacionadas