Ответ
Место хранения: Сама strong-ссылка как переменная хранится в стеке (для локальных переменных) или в куче (если является свойством класса). Объект, на который она указывает, всегда размещается в куче (heap).
Принцип работы (ARC): Strong-ссылка увеличивает счетчик ссылок (retain count) объекта. Пока существует хотя бы одна strong-ссылка, объект не освобождается.
Пример:
class Person {
let name: String
init(name: String) { self.name = name }
}
// Создание strong-ссылок
var strongRef1: Person? = Person(name: "Alice") // retain count = 1
var strongRef2 = strongRef1 // retain count = 2 (новая strong-ссылка)
strongRef1 = nil // retain count = 1
strongRef2 = nil // retain count = 0 -> объект деаллоцируется
Ключевые особенности:
- По умолчанию: Все ссылки в Swift — strong.
- Управление памятью: Автоматическое (ARC). Присваивание увеличивает счетчик, обнуление переменной — уменьшает.
- Циклические ссылки: Могут возникнуть, если два объекта имеют strong-ссылки друг на друга. Решаются через
weakилиunowned.