Использование * в синтаксисе Objective C - PullRequest
2 голосов
/ 10 апреля 2010

Я немного борюсь с неким объективным синтаксисом. Может ли кто-нибудь подробно рассказать об использовании * в следующем методе экземпляра.

- (IBAction)sliderChanged:(id)sender{
    UISlider *slider = (UISlider *)sender;
}

Я понимаю, что мы создаем переменную, типизированную как UISlider, и затем устанавливаем ее в значение sender, как только она будет преобразована в UISlider. Однако я не понимаю, для чего * и почему

UISlider slider = (UISlider)sender; 

не будет работать.

Ответы [ 4 ]

13 голосов
/ 10 апреля 2010

*, как в C, при использовании в типе обозначает указатель (например, ваш случай) и разыменовывает указатель.

Указатель - это просто переменная, которая содержит адрес в памяти чего-то другого, в вашем примере это объект UISlider.

Итак, в вашем примере,

UISlider *slider = (UISlider *)sender;
Ползунок

имеет тип UISlider * или указатель на объект UISlider.

Следующее руководство по указателям в C также применимо к Objective-C: Все, что вам нужно знать об указателях в C

3 голосов
/ 10 апреля 2010

На все объекты Objective-C следует ссылаться с помощью указателей, поскольку они находятся в куче, а не в стеке.

2 голосов
/ 11 апреля 2010

Я думаю, что путаница возникает из-за использования (id) в:

- (IBAction)sliderChanged:(id)sender{
    UISlider *slider = (UISlider *)sender;
}

Objective C имеет тип id , который более или менее эквивалентен (NSObject *). По сути, он может указывать на любой тип объекта Objective C. Итак, на самом деле этот код гласит:

- (IBAction)sliderChanged:(NSObject*)sender{
    UISlider *slider = (UISlider *)sender;
}

Больше или меньше. Поскольку мы (программист) знаем, что объектом-отправителем является UISlider, мы приводим этот объект к (UISlider *) при присвоении его значения ползунку UISlider *.

2 голосов
/ 10 апреля 2010

Вы создаете переменную с именем slider, которая имеет тип UISlider *, то есть указатель на UISlider.

Вы присваиваете значение переменной sender, являющееся anid, которое является указателем на объект Objective C, на ползунок переменной, чтобы ползунок и отправитель указывали на один и тот же фрагмент памяти.

В Apple Objective C все объекты объявлены в куче и доступны через указатели.

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