При инициализации + (void) блокируется поток? - PullRequest
1 голос
/ 19 февраля 2010

Глядя на определение «initialize»:

+ (void)initialize

Обсуждение

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

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

1 Ответ

2 голосов
/ 19 февраля 2010

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

...