За одним исключением, все объекты в 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% случаев вы будете иметь дело со ссылками на объекты, а не с самим объектом. Все остальное зависит только от вас.