2009-02-17 8 views
5

Prenons l'exemple de code ObjC suivant:Est-ce une bonne idée de conserver/libérer les paramètres de la méthode dans Objective-C?

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

Si ce code était en cours d'exécution dans une application multi-thread, serait-il une bonne idée de conserver/libérer someParam? Plus précisément, je pense à des scénarios dans lesquels le paramètre transmis est un objet singleton partagé par de nombreux threads. Est-ce que ce qui suit est plus sûr, par exemple?

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

Répondre

11

Non, ce n'est pas la tâche des fonctions individuelles d'essayer de fournir une sécurité de thread pour les paramètres.

Quelque part en haut de la pile quelque chose a transmis l'objet qui est le paramètre à "doStuffWithString". C'est le code qui devrait garantir que l'objet restera valide pendant la durée de l'appel de la fonction.

Deux choses à considérer;

  1. Dans les situations où vous appelez une fonction tierce ou une bibliothèque, celles-ci ne seront pas conservées/libérées pour vous.
  2. S'il y a un risque que le param soit effacé cela pourrait se produire avant même que votre appel à "retenir" ne survienne!

This thread peut aussi vous être utile.

Questions connexes