38. Чем weak отличается от unowned?Теория

Дополнительные вопросы

1. Что будет при обращении через unowned, если экземпляр класса уже освобождён?

2. Что будет при обращении через weak, если экземпляр класса уже освобождён?

Темы

Обе ссылки не увеличивают счётчик. Разница в том, что происходит после освобождения объекта. weak это опционал. Когда объект освобождён, ссылка сама становится nil. unowned не опционал: код считает, что объект ещё жив.

Дополнительные вопросы

1. Обращение по unowned к уже освобождённому объекту ломает выполнение. Ссылка не обнуляется, и рантайм ловит обращение к мёртвому объекту.

2. weak к этому моменту уже nil. Чтение проходит через опционал: guard let self else { return } просто выходит, падения нет.