Понимание динамической среды выполнения Objective-C - PullRequest
2 голосов
/ 16 июня 2009

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

Есть ли какая-то причина, почему это стандарт в Objective-C? Я попытался посмотреть везде (и да, даже на StackOverflow), но я не смог найти какой-либо явной причины, кроме «это так». Я особенно заинтересован, потому что Objective-C считается строгим супер-набором C с функциями OO.

Если я пропустил статью по InterBlag или сообщение по StackOverflow по ошибке на эту тему, пожалуйста, инициируйте постепенное отключение. :)

Ответы [ 2 ]

2 голосов
/ 16 июня 2009

Я думаю, что это связано с наследием Smalltalk.

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

Почему вы чувствуете, что это противоречит тому факту, что Objective-C - это супер-набор C? В конце концов, обычный C не может ни размещать объекты в стеке ... ни где-либо еще. struct s, OTOH, разрешены в стеке, как на C, так и на Objective-C

0 голосов
/ 20 июня 2009

Я не совсем отвечаю на ваш вопрос, но, так как вы понимаете время выполнения Obj-C, здесь это так. Вы можете распределять объекты более эффективно, используя NSZones. Их не будет в стеке, но, по крайней мере, вы сможете избежать некоторых проблем фрагментации и производительности: текст ссылки

...