@synchronized em um método estático
-
16-09-2019 - |
Pergunta
Em Objective-C, pode declarar um bloco como sendo sincronizado em algum objecto utilizando a construo @synchronized
. Seria algo parecido com isto:
@synchronized (self) {
// Do something useful
}
No entanto, estou curioso o que exatamente self
está se referindo a quando você tem um método estático (+
vez de -
). Eu tentei olhar através dos docs da Apple, e eles fazem alusão ao facto de ser OK, mas realmente não explicar. Eu sei que funciona, eu sou apenas curioso o que significa.
Solução
self
dentro de um método de classe (estático) refere-se ao objecto de classe.
Outras dicas
Em Objective-C self
é determinado pelo contexto. Em um método de instância, que seria a instância que está sendo chamado. Num método estático, seria o próprio objecto de classe (i.e. o resultado de um método em [self class]
exemplo)
Com as respostas acima, basta ter em mente que, se um thread chama um método de instância usando @synchronized (self), e outro segmento chama um método de classe usando @synchronized (self), nenhuma sincronização vai acontecer entre as duas chamadas, porque eles estão usando objetos diferentes para sincronização.