Мне просто интересно, если класс с функцией + load вызывается только один раз перед основным, метод
A +load
не вызывается "один раз перед основным", хотя это может быть общимв этом случае он вызывается один раз средой выполнения после загрузки образа, частью которого он является, и с динамически загружаемыми изображениями (см. Инициализация классов Objective C в программировании динамической библиотеки AppleТемы ), которые могут быть после main
- см. Документацию +load
.
, так зачем нужно писать dispatch_once внутри?
Если ваш код никогда напрямую не вызывает +load
, то, похоже, не нужно , хотя нет явного обсуждения безопасности потоков в Темах программирования динамической библиотеки или в +load
Документация, как и для метода +initialize
.
Однако +load
- это просто метод, и его можно вызывать напрямую, хотя это было бы необычно, поэтому, возможно, автор просто использовал dispatch_once
изизобилие осторожности, номы действительно не можем знать.
(Примечание: метод +initialize
может быть вызван более одного раза во время выполнения из-за наследования. Однако, поскольку +initialize
является поточно-ориентированным, можно использовать простой тест, чтобы убедиться, что код запускается только один раз, поэтому нет необходимости использовать dispatch_once
.)
HTH