Что значит -> значит? - PullRequest
       0

Что значит -> значит?

7 голосов
/ 22 декабря 2010

Я относительный новичок в Objective-C (изучал только книгу Аррона Хиллеграса), и меня смущает следующий фрагмент кода, который я нашел в одном из примеров кода Apple, в частности, что означает ->?

-(id) initWithNumbers:(NSArray *)numbers
{
    self = [super init];
    if (self != nil)
    { 
       self->_numbers = [numbers copy];
    }
    return self;
}

В заголовочном файле _numbers объявлен как

NSNumber * _number;

(подчеркивание имеет какое-то значение из того, что я помню где-то читал, но это тоже ускользает от меня на данный момент.

Спасибо Robin

Ответы [ 5 ]

8 голосов
/ 22 декабря 2010

-> - это обычный оператор C для доступа к членам указателя на структуру; оператор . предназначен для доступа к членам структуры. Таким образом:

a->b

переводится как

(*a).b

Поскольку объекты Objective C являются указателями на структуры, расположенные под всем этим, это работает для доступа к переменным экземпляра.

2 голосов
/ 22 декабря 2010

Вы используете ->, когда хотите получить доступ к ивару.Подобно структурам C, вы будете использовать . или -> (в указателях на структуры) в объектах Objective-C, которые вы можете использовать ->, но в этом нет необходимости, поскольку вы можете обращаться к ним напрямую.

self->_numbers = [numbers copy];

и

_numbers = [numbers copy];

одинаковы

Вы хотите использовать ->, если хотите получить доступ к этому ивару явно.Помните, что в Objective-C вы можете использовать ., но только когда это свойство.Вы можете использовать -> независимо от этого.

2 голосов
/ 22 декабря 2010

Обычно его называют оператором «стрелка».Он позволяет вам получить доступ к переменным экземпляра объекта (или struct), используя ссылку или указатель на экземпляр.Это общий синтаксис с C и C ++.

Я изо всех сил пытаюсь найти хорошую запись, но вы можете найти этот информативный.

Что касается подчеркивания -обычно они означают «частный»;в соответствии с Руководством по кодированию для какао - основы именования :

Избегайте использования символа подчеркивания в качестве префикса, означающего частный, особенно в методах.Apple оставляет за собой право использовать это соглашение.Использование третьими лицами может привести к столкновениям пространства имен;они могут невольно переопределить существующий частный метод своим собственным, что приведет к катастрофическим последствиям.

0 голосов
/ 22 декабря 2010

Это оператор, основанный на языке программирования Си.А поскольку Objective-C совместим с программированием на C, вы можете увидеть разработчиков, использующих традиционное программирование в стиле C.

"->" используется для доступа к элементам указателя.А поскольку «объекты» в Objective-C - это просто указатели (обозначенные *), например, NSNumber * number;Вы можете использовать эту запись для доступа к своим элементам.

Я никогда не использовал эту нотацию в Objective-C, поскольку точечная нотация в Objective-C принята.Если «self» имеет синтезированное свойство «number», self.number должен совпадать с self-> number (это верно ТОЛЬКО в Objective-C.

0 голосов
/ 22 декабря 2010

Это указывает на ссылку в этом случае на переменную экземпляра объекта.Self относится к самому объекту, и, записывая self->_numbers, вы ссылаетесь на переменную, которая является частью класса, вместо глобальной переменной с именем _numbers.

Вы уверены, что это не упоминается в вашей книге?

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