Junior — Middle
Hogyan lehet megszüntetni egy ciklikus hivatkozást a memória kezelésében?
sobes.tech MI
Válasz az MI-től
Циклические ссылки возникают, когда два или более объекта ссылаются друг на друга, что мешает системе подсчёта ссылок освободить память, так как счётчик ссылок не становится нулём. В iOS для устранения циклических ссылок используют слабые (weak) и безвладельческие (unowned) ссылки.
- weak — ссылка, которая не увеличивает счётчик ссылок и автоматически обнуляется при удалении объекта.
- unowned — ссылка, которая не увеличивает счётчик, но не обнуляется, используется когда уверены, что объект будет существовать дольше.
Пример:
class Person {
var apartment: Apartment?
}
class Apartment {
weak var tenant: Person? // слабая ссылка, чтобы избежать цикла
}
let person = Person()
let apartment = Apartment()
person.apartment = apartment
apartment.tenant = person
Таким образом, слабые ссылки разрывают цикл, позволяя ARC корректно освобождать память.