Должны или не должны использовать файлы пера? - PullRequest
7 голосов
/ 14 января 2012

Я новичок в разработке для iOS.Я прочитал некоторые из исходного кода, который я нашел в Интернете, и многие из них не содержат ни одного файла nib.Кажется, что все представление нарисовано вручную из кода.

Каковы преимущества наличия / отсутствия файла пера?Почему они решили создать все из кода вместо того, что вы могли бы визуализировать, например раскадровку или файлы * .xib?

Ответы [ 6 ]

11 голосов
/ 14 января 2012

Самая большая причина, по которой мне нравится код, заключается в том, что он хорошо различается в управлении исходным кодом. XIB очень трудно различать, объединять, читать.

Код также легко копировать / вставлять сохраненные фрагменты. С IB я всегда забываю какой-то флажок, который заставляет меня задуматься, почему магия не работает. Мои заметки содержат фрагменты кода.

Что IB действительно выделяет, так это макет и помощь с рекомендациями по интерфейсу пользователя (количество пикселей между элементами управления и т. Д. ... с направляющими линиями).

Итак, мое личное предпочтение - макет в IB и все остальное в коде (включая цель, действие, добавление столбцов и т. Д. И т. Д.). Однако в динамических сценариях IB разваливается, и в результате вы получаете пользовательские представления.

Вот похожий пост:

Интерфейсный конструктор (XIB) или код при объединении в командной среде?

9 голосов
/ 31 января 2012

Есть много причин, почему вы должны использовать перья и почему вы не должны.Нет однозначного ответа, и каждый ответ зависит от того, что вам нужно сделать.

Помимо очевидных преимуществ, которые предлагают Nibs (быстрый процесс создания пользовательского интерфейса, минимизировать код построения представления в файлах .m), они предлагают то, что вы можетеНе найти другого пути: решение проблем локализации.При переводе приложения на другие языки вы будете сталкиваться с фразами и вещами, для объяснения которых требуется 2-3 слова, а на другом языке - только один.Это серьезно приводит к ошибкам с неуместными представлениями внутри контроллера представления при использовании разных локализаций.Таким образом, вы можете иметь 2-3 вспомогательных наконечника для каждого наконечника в Xcode 4, и локализовать каждый из них так, как вам нравится, и размещать кнопки и представления в правильных местах, не беспокоясь о перемещении ваших представлений в зависимости от языкаПользователь имеет.Если бы вы делали все это с помощью кода, вы должны были бы поместить «если везде», и это, безусловно, плохая практика программирования и подвержена ошибкам.

Я создал несколько контроллеров представления, для которых потребовались бы сотни строк.настроить представления, если я не использовал конструктор интерфейса.

Тем не менее, NIB никогда не достигнут производительности создания представлений программным способом, поскольку каждый NIB является дескриптором представления, написанным на HTML / XML, и перед созданием любого представления файл должен быть прочитан с диска и проанализирован.В перьях также отсутствуют параметры настройки, которые есть у простого кода (тени, закругленные углы и другая магия кварца).Эти параметры настройки недоступны, поскольку существует много способов достижения того же результата с помощью кода, либо путем обращения к высокоуровневому уровню Core Animation, либо путем непосредственного обращения к QuartCore и CGGraphics и выполнения там тяжелых задач, что, безусловно, быстрее и рекомендуется в большинстве случаев.случаи (тени с использованием слоев могут быть очень медленными).Поэтому Apple не хочет ограничивать разработку определенным способом рисования вещей.

NIB существуют по определенной причине.Вы должны убедиться, что в своем заявлении вы понимаете причины создания NIB.Существуют перья для подключения кода к розеткам, облегчения локализации, ускорения разработки и очистки кода.Внутри проекта вы обязательно должны использовать Nibs, но вы также должны избегать их использования, когда простой код также даст вам те же результаты с минимальными или схожими усилиями.

И последнее, но не менее важное, примите во внимание управление памятью.Использование перьев повлияет на освобождение выделенных объектов, таких как IBOutlets.Если вы уверены, что созданный вами IBOutlet будет освобожден, когда вы захотите, не используйте NIB.вместо этого используйте простой код.

7 голосов
/ 14 января 2012

Есть много причин для создания представлений в коде.

  • nib-файлы загружаются лениво и иногда приводят к заметному отсутствию реакции, которое пользователям не нравится
  • вы не можете настроить все в IB, и многие просмотры нуждаются в некоторых дополнительных дополнениях
  • иногда проще просто записать свой вид, чем щелкнуть и перетащить все необходимые вещи вместе
  • ...

Я думаю, что наиболее важной причиной является отсутствие производительности и возможностей.

Я использую nib-файлы, когда просто хочу показать легкую информацию с помощью простых кнопок и меток и для создания прототипов.

5 голосов
/ 14 января 2012

Существуют очень простые перья, такие как типичный MainWindow.nib, которые не имеют локализованного контента и могут быть воспроизведены с помощью одной строки кода.В таких случаях код выполняется намного быстрее, чем разархивирование пера.

Существуют также высокодинамичные макеты, которые невозможно описать как перо.

Вы должны выбрать наиболее удобный и эффективный способ в каждомчастный случай.Всегда будут компромиссы, просто выбирайте мудро.

1 голос
/ 25 ноября 2013

Файл пера - это особый тип файла ресурсов, который вы используете для пользовательских интерфейсов приложений iOS и Mac.Файл пера - это документ Interface Builder.Вы используете Interface Builder для разработки визуальных частей вашего приложения, таких как окна и представления, а иногда для настройки невизуальных объектов, таких как объекты контроллера, которые ваше приложение использует для управления своими окнами и представлениями.Фактически, когда вы редактируете документ Interface Builder, вы создаете граф объектов, который затем архивируется при сохранении файла.Когда вы загружаете файл, граф объектов не архивируется.

Файл пера и, следовательно, граф объектов могут содержать объекты-заполнители, которые используются для ссылки на объекты, которые находятся за пределами документа, но которыеможет иметь ссылки на объекты в документе, или на какие объекты в документе могут быть ссылки.Специальным заполнителем является Владелец файла.

Во время выполнения вы загружаете файл пера с помощью метода loadNibNamed: owner: или его варианта.Владелец файла - это заполнитель в файле пера для объекта, который вы передаете в качестве параметра владельца этого метода.Независимо от того, какие соединения вы устанавливаете с владельцем файла и из него в файле пера в Интерфейсном Разработчике, восстанавливаются при загрузке файла во время выполнения.

iOS использует перья как деталь реализации, которая поддерживает раскадровки, макет дизайна пользовательского интерфейса iOSформат.Раскадровки позволяют проектировать и визуализировать весь пользовательский интерфейс вашего приложения на одном холсте.Для разработчиков iOS рекомендуется использовать раскадровки для разработки пользовательских интерфейсов.

0 голосов
/ 22 февраля 2013

Я бы начал с XIBS. После того, как вы доработали пользовательский интерфейс, перенесите свои xibs в код. Таким образом, вы получите лучшее из обоих миров. XIB могут быть медленными, и я видел 400KB XIBS (хотя и довольно редко). Хотя XIB определенно жестоки ...

...