Цель-C: инициализация против инициализации - PullRequest
72 голосов
/ 31 мая 2011

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

Ответы [ 2 ]

125 голосов
/ 31 мая 2011

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

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

17 голосов
/ 23 марта 2013

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

...