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

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

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

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

70 голосов | спросил Steve 31 Jpm1000000pmTue, 31 Jan 2012 21:07:02 +040012 2012, 21:07:02

10 ответов


0

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

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

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

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

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

РЕДАКТИРОВАТЬ 2 (март 2013 г.): тем временем раскадровки и Xcode работают намного лучше, а документация и лучшие практики широко распространены. Я думаю, что работа с раскадровкой может быть рекомендована для большинства проектов, даже если есть некоторые глюки.

РЕДАКТИРОВАТЬ 3 (сентябрь 2013 г.): теперь с новым форматом Xcode 5 работа в командах с SB может стать еще лучше, поскольку, как представляется, становится возможным объединить SB-код теперь намного проще.

Еще одно РЕДАКТИРОВАНИЕ: хорошо, если у вас есть час времени, расслабьтесь, расслабьтесь и слушайте этих ребят, обсуждающих эту тему (Рэй Вендерлих и Ко)

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

ответил brainray 25 J0000006Europe/Moscow 2012, 19:19:18
0

Резюме

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

Различия

Перья предназначены для использования с одним UIView. Их также можно подключить к подклассу UIViewController, установив класс владельца файла в любой подкласс UIViewController и подключите точку просмотра (перетащите для подключения с помощью Инспектора подключений в крайнюю правую панель XCode).

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

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

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

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

Подробная

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

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

  1. Раскадровки имеют возможность масштабирования, которой нет у Nibs. Серьезно, вы вообще не можете увеличивать масштаб изображения в Nibs, что плохо при проектировании больших экранов на маленьком ноутбуке.
  2. В перьях отсутствуют ключевые функции, такие как:
    • Прототип и динамические ячейки для UITableView ( больше информации )
    • Свойство верхнего макета (см. комментарий)
    • Возможно, есть еще что-то, отредактируйте или прокомментируйте, если у вас есть что добавить в этот список
  3. Вам не нужно возиться с настройкой класса владельца файла.

Основной аргумент против раскадровок заключается в том, что наличие всех ваших контроллеров представлений в одном месте приводит к конфликтам слияния, медленному 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 над раскадровками

  1. Команды и слияния

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

Ответ: одна раскадровка вызывает не больше конфликтов слияния, чемодиночное перо

  1. Сложность

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

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

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

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

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

ответил Kevin 22 J0000006Europe/Moscow 2015, 06:46:37
0

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

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

ответил Stephen Darlington 31 Jpm1000000pmTue, 31 Jan 2012 21:16:15 +040012 2012, 21:16:15
0

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

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

Недостатки:

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

  • Autolayout нельзя включить для одного контроллера представления в раскадровке.

ответил railwayparade 3 FebruaryEurope/MoscowbMon, 03 Feb 2014 03:21:19 +0400000000amMon, 03 Feb 2014 03:21:19 +040014 2014, 03:21:19
0

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

ответил Beleg 1 FebruaryEurope/MoscowbWed, 01 Feb 2012 03:04:15 +0400000000amWed, 01 Feb 2012 03:04:15 +040012 2012, 03:04:15
0

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

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

ответил Ell Neal 31 Jpm1000000pmTue, 31 Jan 2012 21:31:30 +040012 2012, 21:31:30
0

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

ответил Drew C 4 +04002013-10-04T20:29:25+04:00312013bEurope/MoscowFri, 04 Oct 2013 20:29:25 +0400 2013, 20:29:25
0

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

ответил Ricardo 3 FebruaryEurope/MoscowbMon, 03 Feb 2014 02:52:26 +0400000000amMon, 03 Feb 2014 02:52:26 +040014 2014, 02:52:26
0

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

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-репозитория

скопировано с какого-либо ресурса

ответил Sandeep Rajbhar 16 Jam1000000amFri, 16 Jan 2015 04:13:46 +030015 2015, 04:13:46
0

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

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

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

Несколько советов.

  • Думайте о каждой раскадровке как о контейнере для контроллеров представления, которые принадлежат друг другу. Не думайте об этом как о грандиозном макете всего вашего приложение.
  • Вам может потребоваться более одного раскадровки
  • Segues действительно полезны только для самых тривиальных вариантов использования - они отлично подходят для этого. Но в приложении реального мира много переходов произойдет изнутри кода. И это нормально.
  • Написать категорию для программной реализации контроллеров представления из раскадровки, так что все, что вам нужно сделать, это позволить vc = SomeViewController.create (), где метод обрабатывает все детали (вытащить раскадровку, вытащить контроллер представления из раскадровки и т.д.).
ответил n13 15 J0000006Europe/Moscow 2015, 14:22:24

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132