Пожалуйста, не делайте этого.
Это был стандартный способ написания блочных комментариев с первых дней языка программирования Си. Нарушение таких соглашений усложняет чтение вашего кода другими людьми (включая автоматизированные инструменты).
Если вам нужно быстро прокомментировать / раскомментировать Java-код, вы можете использовать ярлык Ctrl+/
. Он будет использовать однострочные комментарии (//
) для закомментирования текущей строки или любого количества отмеченных строк кода.
Синхронизация на уровне языка Objective-C использует мьютекс, как и NSLock
. Семантически есть некоторые небольшие технические различия, но в основном правильно думать о них как о двух отдельных интерфейсах, реализованных поверх общего (более примитивного) объекта.
В частности, с NSLock
у вас есть явная блокировка, тогда как с @synchronized
у вас есть неявная блокировка, связанная с объектом, который вы используете для синхронизации. Преимущество блокировки уровня языка состоит в том, что компилятор понимает ее, поэтому он может решать проблемы с областью видимости, но механически они ведут себя в основном одинаково.
Вы можете думать о @synchronized
как о переписанном компиляторе:
- (NSString *)myString {
@synchronized(self) {
return [[myString retain] autorelease];
}
}
преобразуется в:
В Objective-C блок @synchronized
автоматически обрабатывает блокировку и разблокировку (а также возможные исключения). Среда выполнения динамически генерирует NSRecursiveLock, связанный с объектом, с которым вы синхронизируете. Эта документация Apple объясняет это более подробно. Вот почему вы не видите сообщения журнала из вашего подкласса NSLock - объект, который вы синхронизируете, может быть чем угодно, а не только NSLock.
По сути, @synchronized (...)
- это удобная конструкция, которая упрощает ваш код. Как и большинство упрощающих абстракций, это связано с накладными расходами (думайте об этом как о скрытых затратах), и хорошо знать об этом, но чистая производительность, вероятно, не является высшей целью при использовании таких конструкций в любом случае.
Он просто связывает семафор с каждым объектом и использует его.