Языки со статической типизацией и языки с динамической типизацией действительно противоположны - по крайней мере, в том смысле, в котором эти термины обычно используются.
Статически типизированный язык - это язык, который включает в себя этап проверки типов (и создания отчетов) во время компиляции (или, по крайней мере, до выполнения кода). Objective C, безусловно, имеет это, так что типизирован статически.
Динамически типизированный язык - это тот, в котором отсутствует такая фаза проверки типов. Следовательно, Цель C не определяется динамически этим определением - и я думаю, что это самое стандартное определение.
Однако Objective C иногда называют динамически типизированным (в дополнение к статически типизированному), потому что он позволяет программисту определять сокращенную проверку статического типа в частях своего кода - особенно для объектов через специальный статический тип id
. Лично я думаю, что было бы менее смутным сказать, что это статически типизированный язык с хорошей поддержкой динамически типизированных объектов.
Обратите внимание, что почти во всех статически типизированных языках есть некоторая поддержка динамической типизации, поскольку, например, они используют проверки во время выполнения, чтобы отследить деление на ноль ошибок, ошибок границ массива, ошибок downcast и т.д. язык с динамической типизацией, иначе почти все языки должны были бы называться динамически типизированными.