2010-02-19 3 views
1

Глядя на определение для «инициализации»:Инициализирует ли + (void) любую блокировку потока?

+ (void)initialize 

Обсуждение

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

указано, что инициализация отправляется «поточно-безопасным способом». Под обложками находится среда выполнения, создающая блокировку, чтобы сделать этот поток потоков безопасным или он по сути потокобезопасен только от того, как работает среда выполнения? Если он блокирует, означает ли это, если вы реализуете + инициализировать среду выполнения, создает блокировку, которую она иначе не создала бы?

ответ

2

Я не могу ответить, заблокирован ли он, но независимо от того, реализуете ли вы +initialize, он все еще называется. Реализация по умолчанию может что-то сделать, но она все еще называется. Поэтому, если среда выполнения блокируется, тогда блокировка создается независимо от того, реализуется ли этот метод вашим подклассом.

+0

Точно; и создание замка действительно действительно дешево. Замки становятся дорогими, когда они заблокированы! Как только инициализация класса выполняется, механизм синхронизации, используемый в нем, никогда не используется снова. BTW: доступен источник для объектной среды-c; он открыт. – bbum

+0

Кусочек головоломки тогда, спасибо. Возможно, мне придется извлечь источник времени выполнения и посмотреть, что произойдет потом. –