В Objective-C, какова разница между методом init
(т.е. назначенным инициализатором для класса) и методом initialize
? Какой код инициализации должен быть помещен в каждый?
Objective-C: init vs initialize
Ответ 1
-init
- это метод экземпляра, используемый для инициализации определенного объекта. +initialize
- это метод класса, который запускается до создания любых экземпляров класса и перед запуском других методов класса. +initialize
- это не то, что вы используете большую часть времени, но оно полезно для настройки любых статических переменных, которые может использовать класс в целом, или для обеспечения выполнения определенных условий до создания любых экземпляров.
Код, принадлежащий методу -init
, подробно описан в разделе Реализация инициализатора Язык программирования Objective-C. Также обсуждается инициализация классов (т.е. +initialize
) и почему вам может понадобиться сделать это в том же документе в разделе Class Objects, Код, который входит в +initialize
, как правило, сильно привязан к специальной функциональности класса, которая требует, чтобы вы сначала инициализировали его. Одна важная вещь, которую следует учитывать в +initialize
(и в любом методе класса), заключается в том, что self
в методе класса относится к самому классу, а не к экземпляру класса.
Ответ 2
Чтобы нарисовать параллель для разработчиков Java, init похож на конструктор, а инициализация - как статический блок для класса.