@synchronized dans une méthode statique
-
16-09-2019 - |
Question
Dans Objective-C, vous pouvez déclarer un bloc comme étant synchronisé sur un objet en utilisant la construction @synchronized
. Il ressemblerait à quelque chose comme ceci:
@synchronized (self) {
// Do something useful
}
Cependant, je suis curieux de savoir ce self
exactement fait référence lorsque vous avez une méthode statique (+
au lieu de -
). J'ai essayé en regardant à travers les documents d'Apple, et ils font allusion être OK, mais ne l'explique pas vraiment. Je sais que cela fonctionne, je suis curieux de savoir ce que cela signifie.
La solution
self
à l'intérieur d'une méthode de classe (statique) se réfère à l'objet de classe.
Autres conseils
Dans self
Objective-C est déterminé par le contexte. Dans une méthode d'instance, ce serait l'instance appelée. Dans un procédé statique, il serait l'objet de classe lui-même (à savoir le résultat de [self class]
dans une méthode d'instance)
Avec les réponses ci-dessus, il suffit de garder à l'esprit que si un thread appelle une méthode d'instance à l'aide @synchronized (auto), et un autre thread appelle une méthode de classe en utilisant @synchronized (auto), aucune synchronisation se produira entre les deux appels, parce qu'ils utilisent des objets différents pour la synchronisation.