@synchronized in einer statischen Methode
-
16-09-2019 - |
Frage
In Objective-C können Sie einen Block mithilfe von als mit einem Objekt synchronisiert deklarieren @synchronized
bauen.Es würde ungefähr so aussehen:
@synchronized (self) {
// Do something useful
}
Allerdings bin ich gespannt, was genau self
bezieht sich darauf, wenn Sie eine statische Methode haben (+
anstatt -
).Ich habe versucht, die Apple-Dokumente durchzusehen, und sie deuten darauf hin, dass es in Ordnung sei, erklären es aber nicht wirklich.Ich weiß, dass es funktioniert, ich bin nur neugierig, was es bedeutet.
Lösung
self
innerhalb einer Klasse (statisch) Methode bezieht sich auf das Klassenobjekt.
Andere Tipps
In Objective-C self
wird durch den Kontext bestimmt. In einer Instanzmethode wäre, dass die Instanz aufgerufen wird. In einer statischen Methode wäre es das Klassenobjekt selbst sein (das heißt das Ergebnis der [self class]
in einer Instanzmethode)
Bedenken Sie bei den obigen Antworten nur, dass, wenn ein Thread eine Instanzmethode mit @synchronized (self) aufruft und ein anderer Thread eine Klassenmethode mit @synchronized (self) aufruft, keine Synchronisierung zwischen den beiden Aufrufen stattfindet, da dies der Fall ist Verwendung verschiedener Objekte zur Synchronisierung.