Мне интересно понять обстоятельства, заставляющие разработчика переопределить + инициализировать или + загрузить. Документация дает понять, что эти методы вызываются для вас средой выполнения Objective-C, но это действительно все, что ясно из документации по этим методам. :-)
Мое любопытство возникает, когда я смотрю пример кода Apple - MVCNetworking. У их модельного класса есть +(void) applicationStartup
метод. Он выполняет некоторую уборку в файловой системе, читает NSDefaults и т. Д. И т. Д., И после попытки изучить методы класса NSObject кажется, что эту работу по уборке можно поместить в + load.
Я изменил проект MVCNetworking, удалив вызов в App Delegate на + applicationStartup и поместив служебные биты в + load ... мой компьютер не загорелся, но это не значит, что это правильно! Я надеюсь получить представление обо всех тонкостях, подводных камнях и многом другом, связанных с пользовательским методом настройки, который вы должны вызывать вместо + load или + initialize.
Документация для + загрузки говорит:
Сообщение о загрузке отправляется классам и категориям, которые как динамически загружаются, так и статически связаны, но только в том случае, если вновь загруженный класс или категория реализует метод, который может отвечать.
Это бессвязное предложение, которое сложно разобрать, если вы не знаете точного значения всех слов. Помогите!
Что подразумевается под «динамически загружаемым и статически связанным?» Может ли что-то быть динамически загружено и статически связано, или они являются взаимоисключающими?
«... вновь загруженный класс или категория реализует метод, который может отвечать» Какой метод? Ответьте как?
Что касается + initialize, в документации говорится:
инициализировать, он вызывается только один раз для каждого класса. Если вы хотите выполнить независимую инициализацию для класса и для категорий класса, вы должны реализовать методы загрузки.
Я понимаю, что это означает: «Если вы пытаетесь настроить класс ... не используйте инициализацию». В порядке Хорошо. Когда и зачем тогда переопределить инициализацию?
+load
рассылается отдельно для категорий; то есть каждая категория в классе может содержать свой собственный+load
метод.