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