шаблон метода init - PullRequest
       2

шаблон метода init

2 голосов
/ 23 июля 2011

У меня проблемы с пониманием, что / как это работает.кажется странным назначать себя для возврата из сообщения инициализации

- (id)init
{
    if((self=[super init])) {
       //code here for setting up
    }

    return self;    
}

1 Ответ

3 голосов
/ 23 июля 2011

Метод init сначала присваивает неявную локальную переменную self (self является одним из двух скрытых аргументов, передаваемых в методы) возвращаемому значению назначенного инициализатора суперкласса .Причина этого заключается в том, что инициализаторы могут возвращать объект, отличный от того, который получил сообщение, например, когда невозможно правильно инициализировать получатель или когда возвращается существующий экземпляр, чтобы избежать необходимости инициализировать новый.

После установки self оператор if гарантирует, что переменные экземпляра инициализируются только в том случае, если self не nil.Если self равно nil, доступ к памяти для переменных экземпляра может быть ошибкой.Очень немногие классы возвращают nil, но все же это допустимое возвращаемое значение.

Это описано в Реализация инициализатора .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...