2009-02-17 14 views
5

Considere el siguiente ejemplo de código ObjC:¿Es una buena idea retener/liberar los parámetros del método en Objective-C?

- (void)doStuffWithString:(NSString *)someParam { 
    // Do stuff with someParam 
}

Si este código se está ejecutando en una aplicación multi-hilo, sería una buena idea para retener/liberar someParam? Específicamente, estoy pensando en escenarios en los que el parámetro pasado es un objeto singleton compartido por muchos hilos. ¿Es el siguiente más seguro, por ejemplo?

- (void)doStuffWithString:(NSString *)someParam { 
    [stringParam retain]; 
    // Do stuff with someParam 
    [stringParam release]; 
}

Respuesta

11

No, no es tarea de las funciones individuales intentar proporcionar seguridad de subprocesos para los parámetros.

En algún lugar de la pila, algo pasó por el objeto que es el parámetro de "doStuffWithString". Este es el código que debe garantizar que ese objeto seguirá siendo válido a lo largo de la duración de la llamada a la función.

Dos cosas a considerar;

  1. En situaciones en las que llame a un tercero o a una función de biblioteca, estas no le retendrán/liberarán.
  2. ¡Si existe el peligro de que se elimine el parámetro, esto podría ocurrir antes de que su llamada a 'retener' ocurra!

This thread también puede ser útil.

Cuestiones relacionadas