Когда указатель НЕ используется в Objective-C? - PullRequest
2 голосов
/ 24 июля 2010
SomeObject *obj = [[SomeObject alloc] init]
[obj someMethod]
obj.someProperty

И [], и.автоматически разыменовывать указатель, правильно?Поэтому всякий раз, когда вы работаете с объектами, вы всегда будете использовать указатели для ссылки на эти объекты.

Будет ли когда-либо объявлена ​​переменная в Objective-C, у которой нет типа указателя?

Ответы [ 2 ]

4 голосов
/ 24 июля 2010

За одним исключением, все объекты в Objective-C живут исключительно в куче, что означает, что вы всегда будете иметь дело со ссылками на объекты.

Единственным исключением являются блоки, которые могут быть созданы в стеке и затем впоследствии перемещены в кучу с помощью Block_copy(). Например:

dispatch_block_t myBlock = ^{
  NSLog(@"This is a block that lives on the stack");
};

И благодаря тому, как они реализованы, блоки можно рассматривать как объекты (т. Е. Вы можете использовать их везде, где можете использовать id).

Конечно, любые объекты не-Objective-C могут быть созданы в стеке. Поэтому, если вы используете Objective-C ++, вы можете создавать объекты C ++ в стеке (как обычно), что означает, что вы будете иметь дело с самим объектом, а не со ссылкой. Также любой стек может быть создан в стеке (int, char*, структура и т. Д.).

Итак, в двух словах: если вы имеете дело с объектами, то в 99,999% случаев вы будете иметь дело со ссылками на объекты, а не с самим объектом. Все остальное зависит только от вас.

4 голосов
/ 24 июля 2010

Конечно - NSInteger, NSFloat, CGPoint и т. Д. В Objective-C существует много типов данных, на которые не ссылаются указатели.

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