Ответ 1
self
внутри класса (статического) метода относится к объекту класса.
В Objective-C вы можете объявить блок как синхронизированный на каком-либо объекте с помощью конструкции @synchronized
. Он будет выглядеть примерно так:
@synchronized (self) {
// Do something useful
}
Однако мне любопытно, что именно self
относится к тому, когда у вас есть статический метод (+
вместо -
). Я пробовал просматривать документы Apple, и они намекают, что все в порядке, но на самом деле это не объясняет. Я знаю, что это работает, мне просто интересно, что это значит.
self
внутри класса (статического) метода относится к объекту класса.
В Objective-C self
определяется контекст. В методе экземпляра это будет вызванный экземпляр. В статическом методе это будет сам объект класса (т.е. Результат [self class]
в методе экземпляра)
С ответами выше, просто имейте в виду, что если один поток вызывает метод экземпляра с использованием @synchronized (self), а другой поток вызывает метод класса с использованием @synchronized (self), синхронизация не будет происходить между двумя вызовами, потому что они используют разные объекты для синхронизации.