Комментарии 2
Каст ĸ
final class— самый быстрый сценарий. Достаточно получить isa pointer объеĸта и сравнить с isa pointer целевого типа.
Каст ĸ class (с наследниками). В этом случае сравнения isa pointer недостаточно, таĸ ĸаĸ isa-pointer может указывать на дочерний класс целевого класса.
как вы это замеряли, учитывая, что компилятор в большей части кода сам расставляет final? Если отключали оптимизацию, то исследование в целом может не иметь смысла.
И что такое "metaclass" со схемы, который в тексте не упоминается? Снова нейросеть писала текст?
Привет! Эти выводы основаны на анализе исходного кода Swift Runtime.
Да, компилятор может расставлять final сам, именно поэтому я указал, что у класса есть наследники, а, значит, к этому классу final приписать нельзя.
Думаю, станет более понятно, если рассмотрим такой пример:
class A {}
class B: A {}
final class C: B {}
let c: Any = C()
// Так как isa-pointer переменной c указывает на класс C, а не на класс A
// Но так как у класса C есть родительские классы,
// мы проверим, есть ли в списке родительских классов нужный нам класс A
let a = c as? A
Как Swift Runtime влияет на производительность iOS-приложений