Skip to content

Latest commit

 

History

History
34 lines (20 loc) · 3.09 KB

File metadata and controls

34 lines (20 loc) · 3.09 KB

Unowned reference

Ссылается на объект в куче, но эта ссылка не учитывается при подсчете ссылок, когда объект освобождается из памяти и после этого вы пытаетесь использовать экземпляр по unowned ссылке, то ваша программа упадет. Редко используется, в основном, что бы разрушить ссылочные циклы (memory cycles).

Грубо говоря, unowned ссылка всегда хранит указатель на адрес в памяти. Даже если этот адрес уже не зарезервирован за вашим приложением, поэтому может быть краш неавторизированного доступа к участку памяти, которое не зарезервировано за нашим приложением.

// Captures a unowned reference to self
var Variable = { [ unowned self ] in
     return self.myProp * 3
}()

Пример корректного использования:

  1. Банковская карта хранит ссылку на человека, которому она принадлежит. Эта ссылка должна быть unowned, потому что логически банковская карта не может существовать без человека.

  2. Легкость дебаггинга.

Производительность

Использование unowned вводит меньше накладных расходов, чем использование weak. Это потому, что weak переменные ссылаются на объект через side tables. Это означает, что есть еще один переход указателя для достижения объекта.

unowned ссылки указывают непосредственно на объект, поэтому у них нет таких накладных расходов.

Unowned vs Weak

Мы устанавливаем weak ссылку на тот объект, который может уйти из памяти раньше, т.е. время жизни этого объекта должно быть меньше, чем время жизни объекта из которого мы обращаемся к weak

Мы устанавливаем unowned ссылку на тот объект, чье время жизни >= времени жизни объекта из которого мы вызываем unowned


3.1.3.1.4.2 Strong Reference Theme | Back To iOSWiki Contents | 3.1.3.1.4.4 Weak Reference Theme