ARC (Automatic Reference Counting) автоматически отслеживает и управляет ссылками на экземпляры классов. Он освобождает память, занимаемую экземпляром, когда на него больше нет сильных ссылок. ARC работает только с экземплярами классов, не со структурами или перечислениями, так как они являются типами-значениями.
Три типа связей между экземплярами:
weak всегда опциональны, так как экземпляр может быть освобожден в любой момент.Циклы сильных ссылок возникают, когда два или более экземпляра класса имеют сильные ссылки друг на друга, предотвращая их освобождение ARC. Для разрешения циклов используются weak или unowned ссылки.
Пример цикла сильных ссылок:
swift
Разрешение цикла сильных ссылок с использованием weak:
swift
Разрешение цикла сильных ссылок с использованием unowned:
swift
ARC в замыканиях: Замыкания также могут создавать сильные циклы ссылок, захватывая экземпляры классов. Для предотвращения этого используются списки захвата ([weak self] или [unowned self]).
swift