Потрясающее объяснение! Большое спасибо!

ective-C, в чем разница междуinit метод (т.е. назначенный инициализатор для класса) иinitialize метод? Какой код инициализации должен быть в каждом?

Ответы на вопрос(2)

Решение Вопроса

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

Код, который принадлежит-init Метод подробно описан вРеализация инициализатора разделЯзык программирования Objective-C, Там также некоторые обсуждения инициализации классов (т.е.+initialize) и почему вам может потребоваться сделать это в том же документе, вОбъекты класса раздел. Код, который входит в+initialize как правило, будет сильно привязан к специальной функциональности класса, которая требует от вас инициализации в первую очередь. Одна важная вещь, чтобы иметь в виду в+initialize (и в любом методе класса) является то, чтоself в методе класса относится к самому классу, а не к экземпляру класса.

 user14201931 мая 2011 г., 20:08
«запускать до создания экземпляров класса» не совсем:послал до этого классаполучает первое сообщение (исключая+initialize метод). Фактически вы можете создать экземпляр класса, не отправляя этому классу сообщение (сIMP его метод создания экземпляра (обычно+allocWithZone: но это может варьироваться)).
 makaed18 янв. 2014 г., 07:41
Ах, спасибо! Теперь это имеет смысл. Я также создалвопрос и было несколько хороших ответов.
 makaed18 янв. 2014 г., 06:14
Я обычно вижуif (self == [NameOfClass class]) внутри+initialize метод, почему мы должны это проверить? Я знаю, что это как-то связано с+initialize метод вызывается в родительском классе дважды, но мне это не понятно. Любая помощь приветствуется!
 Caleb18 янв. 2014 г., 07:38
@makaed Ваш вопрос хорошо ответил вдокументы - вот соответствующая строка:Реализация суперкласса может вызываться несколько раз, если подклассы не реализуют инициализацию - среда выполнения вызовет унаследованную реализацию ... Итак, хотя+initialize вызывается только один раз для каждого класса, одна реализация может вызываться несколько раз - один раз для класса, в котором он находится, и один раз для каждого подкласса, который не предоставляет свой собственный+initialize метод.
 Caleb31 мая 2011 г., 20:10
@WTP, честно, но если вы работаете в этом пространстве, вы, вероятно, уже достаточно четко различаете между + initialize и -init.

init похож на конструктор, а initialize похож на статический блок в классе.

 Sakthimuthiah20 мар. 2014 г., 08:22
Потрясающее объяснение! Большое спасибо!

Ваш ответ на вопрос