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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top