Каковы преимущества использования раскадровки вместо xib файлов в iOS-программировании?

Каковы основные различия между использованием раскадровки и xib файлами.

В частности,  какие преимущества или недостатки использования раскадровки?

К сожалению, несмотря на довольно много исследований, все, что я смог найти на Storyboards, - это простые учебники, которые показывают, как настроить раскадровку, а не конкретную информацию, объясняющую, что это такое.

Ответ 1

Раскадровка:

  • Контейнер для всех ваших сцен (контроллеры просмотра, контроллеры Nav, контроллеры TabBar и т.д.)
  • Менеджер соединений и переходов между этими сценами (они называются Segues)
  • Хороший способ управлять тем, как разные контроллеры разговаривают друг с другом.
  • Раскадровки дают вам полный обзор потока вашего приложения, которое вы никогда не сможете получить из отдельных файлов nib, плавающих вокруг.
  • Редуктор всего "беспорядка", который происходит, когда у вас есть несколько контроллеров, каждый из которых имеет собственный файл nib.

Я использую раскадровки на некоторое время, а ТОЛЬКО нижняя сторона - это то, что вы не можете настроить iOS 4 или ниже. Раскадровки работают только на устройствах под управлением iOS 5 или выше. Помимо этого, преимуществ много, а недостатки - несуществующие ИМО.

Лучший учебник, который я видел, - Ray Wenderlich

Кроме того, если вы являетесь участником программы Apple Developer, ознакомьтесь с прошлым сеансом WWDC на раскадровки (iTunesU), это потрясающе.

Еще один замечательный (также на iTunesU) - это новейший курс программирования приложений в Стэнфорде iOS.

Ответ 2

Есть не только сторонники раскадровки, но и минусы - только потому, что вы просили ввести:

  • Нелегко работать с SB в команде, так как только один участник может работать на SB сразу (потому что это один файл).

- Следующее неверно: - если вам нужно делать то, что не предлагает SB, не так просто получить SB смешанным с программными созданными представлениями (ну, возможно, хотя)

Правило большого пальца похоже: чем сложнее вы ожидаете получить ваш проект, тем больше вам лучше не идти на SB.

EDIT: - еще один недостаток SB: работа над всеми раздражающими ошибками XCode относительно SB. Например. при этом необходимо часто очищать папку DerivedData из-за нескольких несоответствий. Иногда файлы раскадровки или ссылка на них повреждаются. Тогда у вас может быть радость найти проблему. Взгляните на этот поток, чтобы получить идею

EDIT 2 (март 2013): тем временем раскадровки и Xcode работают намного лучше, а документация и лучшие практики широко распространены. Я думаю, что работа с раскадрой может быть рекомендована для большинства проектов, даже если есть еще некоторые сбои.

EDIT 3 (сентябрь 2013 г.): теперь новый формат Xcode 5, работающий в командах с SB, может стать еще лучше, так как кажется возможным теперь слияние SB-кода намного проще.

Еще один EDIT: ну, если у вас есть час времени, откиньтесь, расслабьтесь и послушайте этих ребят, обсуждающих эту тему (Ray Wenderlich and Co)

Редактировать 2016.1: после долгого времени, когда был сторонником раскадровки, у меня было столько хлопот с ним в последние месяцы, что я решил как можно дальше покинуть Раскадровки. Причиной этого является то, что Apple добавляет такую ​​функцию, как глупость, но не заботится об ошибках и недостатках. Производительность с множеством ограничений автоматического компоновки действительно плоха (в то время как время разработки), и склонность к ошибкам стала огромной. Пример: еще менее сложные раскадровки, как правило, попадают в "грязный режим" сразу после открытия проекта в Xcode (см. Состояние git). Совет: в качестве новичка вы будете любить раскадровки, так как вы можете прототип быстро и получить работу без большого количества кода. Когда вы входите в промежуточное состояние, вы добавите больше GUI-кода в свой проект. Теперь вы начинаете идти туда и обратно между кодом и SB - и все начинает ухудшаться. Рано или поздно вы, как правило, делаете большую часть содержимого GUI в коде, потому что результат более предсказуем, чем наличие нескольких источников.

Ответ 3

Резюме

Файлы Nibs/.xib и раскадровки - это файлы интерфейса Builder, которые используются для визуального создания пользовательского интерфейса для приложений iOS и Mac в Xcode (я буду использовать терминологию iOS для классов, так как этот вопрос отмечен iOS, но это также относится к Mac).

Различия

Наконечники предназначены для использования с одним UIView. Они также могут быть подключены к подклассу UIViewController, установив класс File Owner в любой подкласс UIViewController и подключив выходное изображение (перетащите, чтобы подключиться с помощью Инспектора подключений в правой правой области Xcode).

Кадры должны содержать пользовательский интерфейс для 1 или более UIViewController. Вы можете создать весь пользовательский интерфейс в одном раскадровке или разделить его на более мелкие части.

Преимущества

Кадры должны всегда использоваться в пользу файлов .xib/Nibs (для контроллеров представлений). Раскалывание имеет больше возможностей и активно развивается Apple.

Каждый аргумент в пользу Nibs полагается на то, что они использовались индивидуально, в то время как раскадровки содержат много сцен. Вы можете использовать одну раскадровку для каждого UIViewController так же легко, как вы можете, с помощью Nib (см. Примеры кода ниже). Продолжайте читать подробные объяснения и примеры кода.

Подробная

Почему Storboards превосходят Nibs?

Ответ в основном сводится к тому, что Apple поощряет использование раскадровки и вкладывает в них больше усилий.

  • У раскадровки есть возможности масштабирования, которых нет у Nibs. Серьезно, вы не можете масштабировать все в Nibs, который отстой при проектировании для больших экранов на маленьком ноутбуке.
  • У Nibs отсутствуют ключевые функции, такие как:
    • Прототип и динамические ячейки для UITableView (подробнее)
    • Свойство top layout guide (см. комментарий)
    • Есть, вероятно, больше, пожалуйста, отредактируйте или прокомментируйте, если у вас есть что добавить в этот список.
  • Вам не нужно связываться с настройкой класса Owner Owner.

Основной аргумент против раскадровки заключается в том, что наличие всех ваших контроллеров представлений в одном месте приводит к конфликтам слияния, медленному Xcode, медленному времени сборки и общей боли в прикладе для поддержки. Следовательно, общий совет - использовать Nib для каждого UIViewController.

Но... Вы можете просто создать раскадровку для каждого UIViewController. Общей практикой (по крайней мере для меня) является скрыть всю инициализацию UIViewController в методе класса (так как ни один другой класс не должен знать имя файла, в котором находится контроллер Nib/Storyboard). Давайте сравним связанные фрагменты кода, которые можно использовать для создания такого метода. Единственная строка кода - это вся разница между ними.

Objective-C

Раскадровка

+ (ViewController *)create
{
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"ViewController" bundle:nil];
    return [storyboard instantiateInitialViewController];
}

Nib

+ (ViewController *)create
{
    return [super initWithNibName:@"ViewController" bundle:nil];
}

Использование

- (void)showMyViewController
{
    ViewController *vc = [ViewController create];
    [self presentViewController:vc animated:YES completion:nil];
}

Swift

Раскадровка

static func create() -> ViewController {
    let storyboard = UIStoryboard(name: "ViewController", bundle: NSBundle.mainBundle())
    return storyboard.instantiateInitialViewController() as! ViewController
}

Nib

static func create() -> ViewController {
    return ViewController(nibName: "ViewController", bundle: nil)
}

Использование

func showMyViewController() {
    let vc = ViewController.create()
    self.presentViewController(vc, animated: true, completion: nil)
}

Аргументы

Я рассмотрю все обычные аргументы для Nibs; как я уже упоминал ранее, в основном используются одиночные файлы, а не как аргумент для Nibs over Storyboards

  • Команды и слияние

Аргумент: наличие раскадровки с большим количеством контроллеров   вызывают конфликты слияния, если вы работаете в команде с несколькими   люди, вносящие изменения

Ответ. Единый раскадровки не вызывает больше конфликтов слияния, чем один Nib

  1. Сложность

Аргумент: очень сложные приложения имеют много сцен в Раскадке, которая ведет к гигантской раскадровке, которая навсегда загружается и едва ли понятна из-за ее размера.

Ответ: Это отличный момент, но вы можете легко разбить Раскалывание на более мелкие части. Ссылки на раскадровки выглядят как отличная функция, которая может использоваться для соединения Storyboards вместе, но они доступны только в Xcode 7/iOS 9+. Кроме того, по-прежнему не является основанием для выбора отдельных Nibs над Storyboards.

  1. Повторное использование

Аргумент: создание Nib для каждого подкласса UIViewController позволяет вам повторно использовать код, поэтому вам не нужно настраивать все ваши ограничения и точки доступа для каждой сцены в вашем раскадровке.

Response: Опять же, не причина выбирать отдельные Nibs по отдельным раскадровки.

Ответ 4

была хорошая презентация о раскадровке, представленная на встрече LiDG пару месяцев назад.

Лично я бы сказал, что это способ пойти с новым приложением. Есть некоторые пробелы, особенно для очень сложных приложений, но pro в основном перевешивают минусы.

Ответ 5

Еще несколько преимуществ раскадровки:

  • Раскалывание имеет лучшую поддержку для просмотра таблиц. То есть вы можете использовать "Динамические" и "Prototype".
  • Легче создавать контроллеры представлений с помощью раскадровки. Вы можете делать такие вещи, как: [se lf.storyboard instantiateViewControllerWithIdentifer:]
  • Раскалывание поддерживает контейнеры контроллера просмотра, поэтому вы можете графически отобразить контроллеры детского представления.

Нижние стороны:

  • Раскалывание медленно обрабатывается в XCode, когда они содержат множество контроллеров представления.

  • Автозапуск не может быть включен для одного контроллера представления в раскадровке.

Ответ 6

Будьте осторожны, если вы используете раскадровки, ваше приложение не будет обратно совместимо со старыми установками ОС.

Ответ 7

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

Я начинаю переходить на использование раскадровки в новых проектах, предоставляя возможность убедить клиента принять iOS 5 как минимальную версию. Это происходит исключительно потому, что я предпочитаю делать это таким образом, и мне требуется меньше времени для выполнения тех же задач.

Ответ 8

Ваше отношение к автоматическому макету также может повлиять на то, хотите ли вы использовать раскадровки. Используя xibs, вы можете включить или отключить автоматическую компоновку на основе .xib, что позволяет использовать микс в вашем приложении, в то время как раскадровки применяют ваш выбор ко всем просмотрам, которые они содержат.

Ответ 9

Вы видите большую картину за одну секунду. Имея много файлов NIB, ну, вы не видите большую картинку. Легче поддерживать ваши программы. Легче понять другие программы... среди прочих.

Ответ 10

<сильные > Преимущества:

1) Очень приятно создавать интерфейсы

2) Вы можете использовать StoryBoard Segues для точного определения навигации/модальных отношений.

3) Если ваше приложение поддерживает несколько устройств, это хороший способ организовать разные виды.

4) Еще одним дополнительным преимуществом является прототипирование.

5) Прототип UITableViewCell может сэкономить время и уменьшить количество кода.

6) вы можете увидеть все экраны приложения в одном месте, используя StoryBoard.

7) Вы можете легко просмотреть взаимосвязь между ними

8), если вы работаете над кодом пользователя, вы можете лучше понять поток приложения.

9) Вы можете настроить пользовательский интерфейс для iPhone 4 и iPhone 5, применив форм-фактор сетчатки из раскадровки, не запуская приложение снова и снова.

10) Клиенты могут увидеть прототип приложения, прежде чем приступать к его разработке, здесь раскадровка помогает вам.

Недостатки:

1) Он доступен только в iOS 5 +

2) StoryBoardSegues являются довольно жесткими, и вы можете часто использовать prepareForSegue.

4) Как и IB, он не очень дружелюбен с другими двигателями и инструментами для отображения.

4) Усиливает совместное использование проектов для одного представления или набора представлений - вам нужно отправлять все или ничего.

5) Для раскадровки вам понадобится большой экран специально для iPad.

6) Сложность при копировании просмотров из других приложений в раскадровку.

7) Проблемы в раскадровке, когда несколько разработчиков работают над одним и тем же проектом с помощью git репозитория

скопирован из некоторого ресурса

Ответ 11

До iOS 7, раскадровки были вроде аккуратными, но не обязательными. Они ввели столько проблем, сколько они решили. iOS 7 наклонил баланс в сторону раскадровки.

С iOS 8 и 9 это уже не вопрос: используйте раскадровки!

Основной недостаток раскадровки заключается в том, что вы полностью зависите от XCode, и вы можете потратить часы на вращение колес на ошибках XCode. Но XCode стал намного лучше, и преимущества с Storyboards теперь слишком многочисленны, чтобы их игнорировать. Просмотр прототипов ячеек таблицы, классы размера, поддержка автоматического макета и т.д.

Некоторые советы:

  • Подумайте о каждой раскадровке в качестве контейнера для контроллеров представлений, которые принадлежат друг другу. Не думайте об этом как о великом макете всей приложение.
  • Вам может потребоваться более одного раскадровки
  • Segues действительно полезны только для самых тривиальных вариантов использования - они отлично подходят для этого. Но в реальном мире многие переходы происходят из кода. И это нормально.
  • Введите категорию, чтобы программные элементы управления представлением из раскадровки (-ов), так что все, что вам нужно сделать, это позволить vc = SomeViewController.create(), где метод обрабатывает все подробности (вытащить сюжетную плату, вытащить контроллер просмотра из доски объявлений) и т.д.).