2012-02-13 7 views
6

Estoy usando la función CFSTR para crear CFString a partir de una cadena c constante y estoy llamando a esta función con mucha frecuencia en mi Daemon.Administración de memoria CFSTR

De documentation:
Un valor devuelto por RFCTA tiene la semántica siguiente:

  1. valores devueltos por RFCTA no son liberados por CFString-son garantiza que sea válida hasta que el programa termina.
  2. Puede retener y liberar valores devueltos por CFSTR de forma equilibrada, como cualquier otro CFString, pero no es obligatorio.

Debo usar retención y liberación?

Respuesta

11

Como indica la documentación, las cadenas creadas CFSTR() siguen siendo válidas hasta que finaliza el programa. Puede liberarlos todo el día, pero en realidad no serán desasignados. Por esa razón, no hay necesidad de retener/liberarlos explícitamente. Es válido para retener/liberarlos porque de lo contrario, no podría pasarlos a través de otro código que los retiene/libera (métodos de marco, etc.). Trátelos como lo haría con los literales NSString creados usando @"", es decir, no es necesario retenerlos o soltarlos después de la creación, pero si está escribiendo código que puede tomar cualquier CFString, debe seguir las reglas normales de administración de memoria, incluido el uso CFRetain() y CFRelease().

+0

Estoy usando esto en mi daemon y llamando a esta función con mucha frecuencia, ¿debería usar alguna otra función? –

+0

¿Le preocupa el rendimiento, el uso de la memoria o? De todos modos, no deberías estar optimizando prematuramente. Si se encuentra con un problema de rendimiento o de uso de la memoria, ese es el momento de perfilar el código y descubrir cómo mejorarlo. –

Cuestiones relacionadas