Статический конструктор эквивалентен в Objective-C?
Я новичок в Objective C, и я не смог узнать, есть ли эквивалент статического конструктора в языке, то есть статический метод в классе, который будет автоматически вызываться до создания первого экземпляра такого класса. Или мне нужно вызвать код инициализации самостоятельно?
спасибо
3 ответа:
The
+initialize
метод называется автоматически при первом использовании класса перед использованием методов класса или созданием экземпляров. Вы никогда не должны звонить+initialize
себя.я также хотел передать лакомый кусочек, который я узнал, что может укусить вас по дороге:
+initialize
наследуется подклассами, а также вызывается для каждого подкласса, который не реализует+initialize
собственных. Это может быть особенно проблематично, если вы наивно реализуете одноэлементную инициализацию в+initialize
. Решение состоит в том, чтобы проверить тип переменной класса следующим образом:+ (void) initialize { if (self == [MyParentClass class]) { // Once-only initializion } // Initialization for this class and any subclasses }
все классы, которые происходят от NSObject имеют оба
+class
и-class
методы, которые возвращают )- isKindOfClass: (Class)aClass (правда для aClass
и детей)+ isSubclassOfClass: (класс)aClass (то же, что и выше, но класс метод)
Edit: проверьте этот пост по @bbum это объясняет больше о
+initialize
: http://www.friday.com/bbum/2009/09/06/iniailize-can-be-executed-multiple-times-load-not-so-much/кроме того, Майк Эш написал хороший подробный пятничный Q&A о
+initialize
и+load
методы: https://www.mikeash.com/pyblog/friday-qa-2009-05-22-objective-c-class-loading-and-initialization.html
есть +инициализировать метод класса, который будет вызван перед использованием класса.