Objective C не имеет ключевого слова final
или чего-либо подобного.Даже если бы атрибут или модификатор времени компиляции существовал, его можно было бы обойти стороной за счет использования API времени выполнения для динамического создания подкласса любого класса psuedofinal.
Компилятор Swift принудил, чтобы Swift мог блокировать попытки подкласса класса final
, но это не помешало бы Objective C сделать это (что не компилируется с помощью компилятора Swift).Таким образом, был добавлен атрибут objc_subclassing_restricted
, специально для того, чтобы заставить clang обеспечить незаконность создания подклассов final
Swift классов.
Нет ничего особенного в том, чтобы сделать окончательные классы Objective C окончательными, даже если бы это было возможно.Objective C - гораздо более динамичный язык, который, кажется, следует мантре Python «мы все взрослые здесь».
Самая большая причина для поддержки классов final
- сообщить компилятору, какие классы являются кандидатами навиртуализация.Но Objective C всегда использует динамическую диспетчеризацию и, в любом случае, никогда не отменяет виртуализацию.