Skip to content

Latest commit

 

History

History
27 lines (16 loc) · 2.76 KB

File metadata and controls

27 lines (16 loc) · 2.76 KB

Weak reference

Ссылается на объект в куче, но эта ссылка не учитывается при подсчет ссылок, когда объект освобождается из памяти weak ссылка установливается в nil (обозначая что объект уже освободился из памяти). Соответственно weak ссылки принадлежит к типу Optional так как могут установлены в nil.

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

Есть еще одна важная вещь о слабых ссылках: после освобождения экземпляра соответствующая переменная станет нулевой (nil). Это хорошо, потому что если мы получим доступ к переменной, указывающей куда-то, где не осталось ни одного экземпляра. Поскольку только опциональные переменные могут стать нулевыми, каждая слабая переменная должна быть необязательной.

Как только мы начинаем ссылаться на объект слабо weak reference, то создается боковая таблица или side table, и теперь объект вместо сильного счетчика ссылок хранит ссылку на боковую таблицу. Сама боковая таблица также имеет ссылку на объект.

Unowned vs Weak

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

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


3.1.3.1.4.3 Unowned Reference Theme | Back To iOSWiki Contents | 3.1.3.1.4.5 Side Tables Theme