TLDR - на мой взгляд, это не очень хорошее решение.
A strong
ссылка обозначает право собственности. Контроллер представления или представления является владельцем представлений, поэтому логический выбор должен быть strong
.
Однако в большинстве случаев это не имеет большого значения, поскольку на представления также строго ссылаются их родители в представлении. иерархия.
Когда это имеет значение? Это имеет значение в ситуациях, когда вы динамически обновляете иерархию представлений, удаляя представления / ограничения и т. Д. c. Как только вы удалите представление / ограничение из иерархии, и у вас нет сильной ссылки на него, оно будет удалено из памяти.
Также обратите внимание, что комбинация weak
и !
является немного опасно, потому что !
обозначает ссылку, которую, как вы ожидаете, никогда не будет nil
.
Это может привести к ошибкам, например:
@IBOutlet weak var constraint: NSLayoutConstraint!
...
constraint.isActive = false // removes constraint from hierarchy, assigns `nil` to constraint
...
constraint.isActive = true // crashes the app
Лично я всегда делаю выводы strong
. Для любых ссылок weak
я всегда использую ?
, а не !
.
Обратите внимание, что weak
в этом случае не имеет ничего общего с защитой от циклов ссылок. Это было только личное решение разработчиков Xcode.
Исторически, с UIViewController.viewDidUnload
могла быть связь. Однако этот метод никогда не вызывается, так как iOS 6.