Понимание динамической среды выполнения Objective-C
-
14-09-2019 - |
Вопрос
Я погружаюсь в Objective-C и Cocoa (знаю, наверное, поздно, но мне нужно с чего-то начинать) и заметил, что все объекты выделяются из кучи.
Есть ли причина, по которой это стандарт в Objective-C?Я пробовал искать везде (и да, даже на StackOverflow), но не смог найти никакой явной причины, кроме «так оно и есть».Мне это особенно интересно, потому что Objective-C считается строгим расширенным набором C с объектно-ориентированными функциями.
Если я пропустил статью о ИнтерБлаг или сообщение на StackOverflow по ошибке на эту тему, инициируйте плавное завершение работы.:)
Решение
Я думаю, что это связано с наследием Smalltalk.
Кроме того, можно сказать, что объекты, выделяемые в стеке, являются особенностью C++.Очень немногие другие языки делают это, и то в основном в качестве низкоуровневой оптимизации для компилятора.В C++ это разумно, поскольку одной из заявленных целей было точно такой же производительный, как обычный C.
Почему вы считаете, что это противоречит тому факту, что Objective-C является расширенным набором C?В конце концов, простой C не может размещать объекты в стеке...ни где. struct
s, OTOH, разрешены в стеке как на C, так и на Objective-C.
Другие советы
Я не совсем отвечаю на ваш вопрос, но, поскольку вы понимаете среду выполнения Obj-C, вот оно.Вы можете более эффективно распределять объекты, используя NSZones.У вас не будет их в стеке, но, по крайней мере, вы сможете избежать некоторых проблем с фрагментацией и производительностью:текст ссылки