Слабые и неопубликованные ссылки используются для предотвращения циклов удержания в ситуации, когда два объекта содержат ссылку на другую. Я использую слабый, но я не использую unowned. Вот пример Apple, ситуации, когда один из двух объектов следует использовать бесхозный ссылка:Какая у вас хорошая репутация?
class Customer {
let name: String
var card: CreditCard?
init(name: String) { self.name = name }
}
class CreditCard {
let number: UInt64
unowned let customer: Customer
init(number: UInt64, customer: Customer) {
self.number = number
self.customer = customer
}
}
Идея заключается в том, что кредитная карта не может существовать без клиента. Поэтому кредитная карта может обойтись без дополнительной развертки, которая повлечет за собой использование слабых ссылок, и вместо этого может использовать неопубликованную ссылку. Хммм ... так почему бы не использовать сильную ссылку? Если все другие ссылки на клиента должны были уйти (что не должно произойти?), То использование кредитной карты принадлежащей им справки приведет к краху; в то время как использование сильной ссылки приведет к утечке памяти. А? Выбор между двумя зол? Лучше сбой, потому что это скорее всего будет замечено во время разработки и тестирования?
Пожалуйста, помогите с некоторым пониманием. Благодарю.
Hi Bob. Итак, все будет хорошо, если мы разработали такие вещи, чтобы только один клиент когда-либо держал ссылку на данную кредитную карту. Это кажется разумным. Учитывая такое положение дел: будет ли конечный результат не таким, если у кредитной карты есть сильная ссылка на клиента? – Verticon
Спасибо, Боб. Я получаю это сейчас. Мы можем использовать unowned, когда дизайн нашего кода гарантирует, что его использование не приведет к доступу к нулевой ссылке. И.Е. дизайн гарантирует, что, когда Клиент будет освобожден, CreditCard также будет освобожден. – Verticon