Подтвердить что ты не робот

@synchronized в статическом методе

В Objective-C вы можете объявить блок как синхронизированный на каком-либо объекте с помощью конструкции @synchronized. Он будет выглядеть примерно так:

@synchronized (self) {
    // Do something useful
}

Однако мне любопытно, что именно self относится к тому, когда у вас есть статический метод (+ вместо -). Я пробовал просматривать документы Apple, и они намекают, что все в порядке, но на самом деле это не объясняет. Я знаю, что это работает, мне просто интересно, что это значит.

4b9b3361

Ответ 1

self внутри класса (статического) метода относится к объекту класса.

Ответ 2

В Objective-C self определяется контекст. В методе экземпляра это будет вызванный экземпляр. В статическом методе это будет сам объект класса (т.е. Результат [self class] в методе экземпляра)

Ответ 3

С ответами выше, просто имейте в виду, что если один поток вызывает метод экземпляра с использованием @synchronized (self), а другой поток вызывает метод класса с использованием @synchronized (self), синхронизация не будет происходить между двумя вызовами, потому что они используют разные объекты для синхронизации.