Объявляет критическую секцию вокруг блока кода. В многопоточном коде @synchronized
гарантирует, что только один поток может выполнять этот код в блоке в любой момент времени.
Если вы не знаете, что оно делает, то ваше приложение, вероятно, не является многопоточным, и вам, вероятно, не нужно его использовать (особенно если сам синглтон не является поточно-ориентированным).
Редактировать: Добавление дополнительной информации, которой не было в исходном ответе от 2011 года.
Директива @synchronized
запрещает нескольким потокам вводить любую область кода, защищенную директивой @synchronized
, относящейся к одному и тому же объекту . Объект, переданный директиве @synchronized
, является объектом, который используется в качестве «блокировки». Два потока могут находиться в одной и той же защищенной области кода, если в качестве блокировки используется другой объект, и вы также можете защитить две совершенно разные области кода, используя один и тот же объект в качестве блокировки.
Кроме того, если вы передадите nil
в качестве объекта блокировки, блокировка вообще не будет выполняться.