2012-01-21 15 views
5

Soy nuevo en iOS 5 y ARC, así que disculpe mi tonta pregunta.Impacto del conteo automático de referencias (ARC) en fugas de memoria

Si utilizamos ARC en nuestro proyecto, ¿significa que no habrá ninguna pérdida de memoria?

¿Existe la necesidad de utilizar instrumentos para detectar fugas de memoria y NSZombies si utilizamos ARC?

+0

No, ARC no erradicará completamente las pérdidas de memoria. Consulte [¿Qué tipo de fugas hace el recuento de referencias automáticas de Objective-C (en Xcode 4.2) para prevenir/minimizar?] (Http://stackoverflow.com/questions/6260256/what-kind-of-leaks-does-objective-cs -automatic-reference-contando-en-xcode-4-2) – BoltClock

Respuesta

5

ARC lo ayudará a eliminar ciertos tipos de fugas, ya que no olvidará release o objetos individuales. Por ejemplo, este tipo de error se vuelve imposible:

myLabel.text = [[NSString alloc] initWithFormat:@"%d", 17]; 
// oops, just leaked that NSString! 

Sin embargo, ARC no eliminará las fugas causadas por los ciclos de retención. Depende de usted eliminar los ciclos de retención, ya sea utilizando referencias débiles o rompiendo manualmente los ciclos antes de que se filtren. Por ejemplo, a medida que empezamos a usar bloques más, los ciclos de bloqueo/auto retención se vuelven mucho más comunes. El Transitioning to ARC Release Notes analiza cómo evitar estos ciclos utilizando referencias débiles.

+1

Si desea comprender ARC, le recomiendo encarecidamente el video "Presentación del conteo automático de referencias" de [WWDC 2011] (https://developer.apple.com/videos/wwdc/2011/). –

+0

¿qué puedo hacer en una situación como esta pregunta http://stackoverflow.com/questions/21423309/memory-leak-in-nsstring-stringwithutf8string-with-arc-enabled – deltaaruna

0

No, eso no evita las pérdidas de memoria. Lo que ocurre en tiempos de ejecución con recuento de referencias es que a veces su código deja referencias colgantes, y luego los objetos no se liberan. Depende de ti escribir un buen código.

+0

Ok. Entonces, ¿se aplicará lo mismo para NSZombies también? – meetpd

0

Si utilizamos ARC en nuestro proyecto, ¿significa que no habrá ninguna pérdida de memoria?

Es posible que todavía haya fugas: en su programa y en las bibliotecas que utilice. Además, ARC solo se aplica a objetos ObjC: puede filtrar fácilmente cualquier asignación de montón que no sea un objeto objc (por ejemplo, malloc/new).

¿Existe la necesidad de utilizar instrumentos para detectar fugas de memoria y NSZombies si utilizamos ARC?

Sí. La respuesta anterior debe detallar por qué no se garantiza que su programa esté libre de estos problemas. Además, el compilador puede equivocarse si hace cosas tontas, y ciertamente puede causar problemas si no protege sus datos correctamente (por ejemplo, ejecución concurrente).

Cuestiones relacionadas