@synchronized in un metodo statico
-
16-09-2019 - |
Domanda
In Objective-C, è possibile dichiarare un blocco ad essere sincronizzato su un oggetto utilizzando il costrutto @synchronized
. Sarebbe simile a questa:
@synchronized (self) {
// Do something useful
}
Tuttavia, sono curioso di sapere cosa esattamente self
si riferisce a quando si dispone di un metodo statico (+
invece di -
). Ho provato a guardare attraverso la documentazione di Apple, e alludono al fatto che è OK, ma in realtà non lo spiego. So che funziona, io sono solo curioso di ciò che significa.
Soluzione
self
all'interno di un metodo di classe (statico) fa riferimento all'oggetto classe.
Altri suggerimenti
In Objective-C self
è determinata dal contesto. In un metodo di istanza, che sarebbe il caso chiamato. In un metodo statico, sarebbe l'oggetto classe stessa (cioè il risultato di [self class]
in un metodo di istanza)
Con le risposte di cui sopra, solo tenere presente che se un thread chiama un metodo di istanza utilizzando @synchronized (auto), e un altro thread chiama un metodo di classe utilizzando @synchronized (self), alcuna sincronizzazione avverrà da una chiamata, perché utilizzano diversi oggetti per la sincronizzazione.