- (id) initWithNumber: (int) n {
Это инициализатор, который принимает int
имени n
, как это единственный параметр.
self = [super init];
Как и во многих объектно-ориентированных языков, self
это имя, которое представляет собой «текущий» объект. Обычно вы не назначаете новое значение self
, но вы делаете это в инициализаторе, потому что в Objective-C на самом деле легально, чтобы инициализатор возвращал другой объект, кроме того, который был выделен. Это очень редко, что на самом деле происходит, но это может быть, поэтому соглашение должно назначить результат инициализатора суперкласса self
. Говоря об этом, super
- это ключевое слово, которое на самом деле означает тот же объект, что и self
, но сообщает компилятору начать поиск методов сопоставления в суперклассе. super
- это то, как вы называете унаследованные методы. Таким образом, эта строка вызывает унаследованный метод init
, который инициализирует объект в отношении суперкласса и присваивает результат self
.
if (self) {
Возможно, что [super init]
не удалось по каким-то причинам, и если так будет возвращено nil
. Важно проверить, что объект не равен нулю, прежде чем выполнять дальнейшую инициализацию.
self->_number = n;
Это глупая линия. Так как self
является указателем на объект, он имеет право разыменовать этот указатель и получить доступ к полям базовой структуры, что и делает оператор ->
. Но текущий объект уже находится в области видимости, поэтому вы можете просто сказать _number = n;
, а не просто. Переменные экземпляра всегда находятся в области ваших методов экземпляра, поэтому вам никогда не нужно self->...
.
}
return self;
Как описано выше, Инициализаторы нужно возвращать указатель на объект, так что здесь вы вернетесь self
.
}
Это основная цель-C. Кажется, вам нужно изучить язык, например, из книги или пройти курс. – gnasher729