Когда использовать указатели в target-c - PullRequest
1 голос
/ 18 мая 2011

Я изучаю, как создавать приложения для iPhone, и я видел, что большинство переменных, которые мы создаем, хранят адреса памяти (указатели) вместо того, чтобы содержать фактическое значение или объект.Я также обнаружил, что каждый раз, когда вы объявляете переменную с указателем char (*), вы знаете, что переменная будет содержать адрес, и всякий раз, когда вы не используете знак (*) для объявления переменнойВы знаете, что он будет содержать значение, а не место в памяти.Но я не знаю, когда нам что.например, у меня есть:

CGFloat someVar = [image1 alpha];  // This variable does not require *
                                   // image 1 is a: IBOutlet UIImageView

и в этом другом случае я должен использовать указатель:

UIViewController *someOtherVar = [[UIViewController alloc] init];  // this type of var requires *

Было бы хорошо, если бы я мог знать, когда я могу использовать каждый вместопробуя каждый, пока проект не скомпилируется.

Ответы [ 2 ]

3 голосов
/ 18 мая 2011

Сигнатуры функций и методов в заголовках и документации будут указывать тип этого типа.

Например, вот как свойство alpha объявляется для UIView:

@property(nonatomic) CGFloat alpha;

Нигде нет *, поэтому вы знаете, что он возвращает CGFloat, а не CGFloat*.

Напротив, свойство backgroundColor объявлено так:

@property(nonatomic, copy) UIColor *backgroundColor;

так что вы знаете, что он вернет UIColor* (указатель).

Некоторые вещи объявлены с типом id, который всегда будет указателем на объект.

В общем, объекты Objective C (типы, объявленные с @interface) всегда будут ссылаться как указатели, в то время как примитивные типы C и structs будут часто (но не всегда) передаваться и возвращаться по значению.

1 голос
/ 18 мая 2011

Значительно упрощает, но это зависит от возвращаемых данных.

Из ваших примеров CGFloat - это обертка для float, которая является примитивным типом данных C.[image1 alpha] возвращает CGFloat.UIViewController это тип объекта.[[UIViewController alloc] init] возвращает указатель на эту выделенную память, (UIViewController *).Поэтому вам нужно использовать указатель.

Указатели можно использовать в большем количестве случаев, чем можно описать.Вообще говоря, когда вы начинаете, вы обычно используете указатели на объекты.Но я призываю вас проверить документацию , чтобы определить точный тип данных.Он предоставит подсказки относительно типа данных, возвращаемых определенным методом или свойством.

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