2011-11-18 17 views
5

Instruments me informa una fuga de una variable NSDate. Pero si agrego los datos retenidos y las publicaciones, creo que debería poder publicarlos en el grupo de autorrelease. Probablemente estoy contando mal, pero quiero asegurarme. Eche un vistazo al RefCt. Si I [Class alloc] debería aparecer un conteo retenido de 1, entonces, si liberara automáticamente ese objeto, debería poder liberarlo, ¿o no?Fuga en instrumentos, recuento de referencias y Autorelease

enter image description here

Respuesta

6

Instrumentos suma los retiene y libera para usted. Eso es lo que le muestra la columna "RefCt": El total acumulado.

Si [alloc Clase] se debería llegar a una cuenta de retención de 1, ...

Y de hecho lo hace; esa es la primera fila en la lista.

... luego, si libero ese objeto, debería poder liberarlo, ¿o no?

Autorelease no es un -1 inmediato; causa un lanzamiento posterior, y que es el -1.

Por lo que tiene:

  1. Asignación: +1 (= 1)
  2. Autorelease: 0 por ahora; provoca una liberación más tarde (sin cambio ahora, para todavía = 1)
  3. Permanencia: +1 (= 2)
  4. de salida: -1 (= 1)
  5. Permanencia: +1 (= 2)
  6. retener: +1 (= 3)
  7. de salida: -1 (= 2)
  8. de salida: -1 (= 1)

Tenga en cuenta que una de las tres publicaciones es la causada por la Autorelease . Solo entonces se incurre en -1.

El objeto necesita otra versión para ser desasignado. Hasta que eso suceda, no lo hará.

Y sí, es posible que un objeto que tenga suficientes autorreleases sobresalientes lo mate cuando se retengan antes de que eso suceda y por lo tanto se mantendrá con vida. Vi que esto ocurría una vez con un objeto que estaba reteniendo poco, pero ese era el valor de una propiedad utilizada por un enlace; el Encuadernador conservó el valor y así lo mantuvo con vida incluso después de haber lanzado automáticamente mi última propiedad de él.

Cuestiones relacionadas