Обновить

Как Swift Runtime влияет на производительность iOS-приложений

Уровень сложностиСложный
Время на прочтение19 мин
Охват и читатели12K
Всего голосов 24: ↑24 и ↓0+25
Комментарии2

Комментарии 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
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Информация

Сайт
l.tbank.ru
Дата регистрации
Дата основания
Численность
свыше 10 000 человек
Местоположение
Россия