Выход Storyboards Xcode: слабому или не слабому - PullRequest
0 голосов
/ 07 января 2020

Только что получил новый MBPro, который означает бесплатную установку Xcode. При использовании раскадровок и (управления) перетаскиванием для создания розеток в помощнике теперь по умолчанию используется weak var. Некоторое время назад это было по умолчанию. Но затем, в какой-то момент, он, кажется, переключился на не слабый.

Почему меняется значение по умолчанию и что лучше по умолчанию для выходных переменных, связанных с кнопками и прочим?

1 Ответ

1 голос
/ 09 января 2020

Как сказал holex. Это зависит от вашего варианта использования. Нет лучшей практики. И есть исторически расширенные варианты для работы с представлениями.
Прежде всего:
Если представление добавляется в иерархию представления (например, addSubview ()), оно будет иметь прочные отношения.

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

Один из вариантов будет проходить через массив подпредставлений и искать ваше представление. В прошлом для более простых UI этого было бы достаточно, и именно поэтому он встроен. Каждое представление может иметь тег, и суперпредставление вашего представления может найти его.

func viewWithTag(_ tag: Int) -> UIView?

Другим способом было бы удерживать ссылку на представление вместо его просмотра. В этот момент в игру вступают торговые точки. Однако, если вы держите ссылку на объект, вы создаете по умолчанию прочные отношения. Это означает, что есть два места, где объект остается живым.

В те времена это было прекрасно. Приложения стали проще и если представление застряло, это было не так уж важно, поскольку сборщик мусора отбрасывает все объекты, когда приложение удаляется. (Хорошо, это абсолютно не очень хорошая практика)

Если у вас более статичный пользовательский интерфейс c, допустим, вы экспериментируете, это не имеет значения. Иметь слабые отношения - это нормально.

Кстати, Xcode спросит вас, хотите ли вы сильную или слабую ссылку, и использует ваше решение по умолчанию. Возможно, вы изменили его один раз и привыкли к новому «по умолчанию»
enter image description here

Если у вас более динамичный c пользовательский интерфейс, посмотрите, как работает UITableView , UITableViewCells - это представления, и вы обычно не держите ссылки на них, чтобы изменить их.

Но лучшая рекомендация для торговых точек: спросите себя, действительно ли вам это нужно. Часто код, который каким-то образом изменяет UIView, должен быть с собственным классом views, вместо того, чтобы хранить весь код в одном месте. (MVC не означает, что весь код входит в UIViewController)

...