Ответ
Класс в Swift — это ссылочный тип (reference type).
Ключевые характеристики:
- При присваивании экземпляра класса новой переменной или передаче в функцию копируется ссылка на один и тот же объект в памяти.
- Несколько ссылок указывают на один экземпляр. Изменения, сделанные через одну ссылку, видны через все остальные.
- Управление памятью осуществляется через ARC (Automatic Reference Counting).
- Поддерживает наследование.
Пример, демонстрирующий ссылочную семантику:
class Vehicle {
var speed: Int = 0
}
let car1 = Vehicle()
car1.speed = 100
let car2 = car1 // car2 — ссылка на тот же объект, что и car1
car2.speed = 200
print(car1.speed) // Вывод: 200. Изменение через car2 затронуло car1. Ответ 18+ 🔞
Да ты посмотри, какой этот Swift хитрый! Вот берёшь ты класс — а он, сука, ссылочный тип, как прилипала какая-то.
Объясняю на пальцах, блядь. Представь, что ты купил одну бутылку пива. Это твой объект в памяти. Дал попить другу — он не новую бутылку получает, а ту же самую, ёпта! Вы оба держитесь за одну и ту же хреновину. Если он отхлебнёт — в бутылке меньше становится для всех, кто за неё держится. Вот и вся ссылочная магия, в рот меня чих-пых!
Короче, запомни:
- Скопировал экземпляр класса — скопировал только бумажку с адресом, где этот объект лежит. Сам объект остался один, на него теперь два указателя.
- Поменял что-то через одну переменную — все остальные, кто на этот объект смотрит, тут же это увидят. Сюрприз, блядь!
- Памятью за тобой следит ARC, как надоедливая тёща, считает, кто на кого ссылается, чтобы не удалить раньше времени.
- И да, классы умеют в наследование — можно нагородить овердохуища иерархий, если не осторожно.
Смотри, как это на практике выглядит, ёперный театр:
class Vehicle {
var speed: Int = 0
}
let car1 = Vehicle()
car1.speed = 100
let car2 = car1 // Внимание! car2 — это не копия, а просто ещё одна бумажка с тем же адресом!
car2.speed = 200
print(car1.speed) // Вывод: 200. Ну вот, я же говорил! Изменение через car2 заебало значение и для car1. Один объект на двоих!
Вот так и живём. Сделал car2 — думал, свою тачку получил, а оказалось, ключи от той же самой, и кто-то уже педаль в пол вдавил. Пиздец, а не принцип.