Подтвердить что ты не робот

Objective-C: init vs initialize

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

4b9b3361

Ответ 1

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

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

Ответ 2

Чтобы нарисовать параллель для разработчиков Java, init похож на конструктор, а инициализация - как статический блок для класса.