Раскадровки против старого пути XIB


Я новичок в iOS и задавался вопросом, что лучше всего узнать. Я прочитал некоторые ответы здесь и так, но некоторые люди говорят, что используют раскадровки, другие скажут, что сначала изучают XIBs. Есть ли реальная польза от изучения XIBs? XIBs легче понять и поможет с раскадровками?

2 51

2 ответа:

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

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

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

вы определенно должны узнать о перьях в какой-то момент. Хотите ли вы начать с них или начать с раскадровки, вероятно, не слишком важно. Просто найдите несколько учебников, которые вам нравятся, и проработайте их с любым типом файла (nib или storyboard), который они используют.

есть польза от изучения обоих подходов.

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

подход xib также позволяет вам несколько большую гибкость с точки зрения вашего собственного кода. Например, iOS 5 содержала ошибку с UITableView и доступность / поддержка VoiceOver, что бы причинить -dequeueReusableCellWithIdentifier: вернуться nil несмотря на то, что задокументировано иначе (см. этот блог для более подробной информации). Для динамической загрузки ячеек табличного представления из xib предусмотрена возможность обойти ошибку.

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

одним из больших преимуществ раскадровки является возможность просматривать весь поток графического интерфейса вашего приложения. Уменьшите масштаб, и вы увидите, как все взаимосвязано и течет. С xibs, в то время как модульность хороша, сложнее представить, как все соединяется и течет вместе. Это может быть полезной функцией для себя, или если у вас есть большая команда, чтобы поделиться, чтобы другие могли видеть, как приложение течет.

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

2014-10-06 обновление - С тех пор как я написал выше, я был вовлечен в большее количество проектов. Некоторые с xib, некоторые, которые могли бы использовать раскадровки.

раскадровки созрели очень много (мы сейчас в Xcode 6), и с ними так много хорошего. Мне очень нравится, как гораздо больше можно сделать в раскадровке, которая немного сложнее в xib-подходе. Один пара примеров:

один при работе с UITableView или UICollectionView сколько вы можете работать с прототипными ячейками непосредственно в раскадровке. Много приятной и легкой настройки, большая часть тяжелой работы может быть в раскадровке, меньше кода. Это очень мило. Попытка сделать это в подходе xib, безусловно, возможна, но есть еще много работы, чтобы это произошло.

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

но одна вещь, которая все еще убивает раскадровки для меня, пытается использовать их в совместной среде. Это просто не будет хорошо сливаться. И в некотором отношении это даже не так, если вы работаете в команде > 1 человека. Если вы сами воспользуетесь преимуществами управления версиями, используйте хорошую модель ветвления и слияния для своего личного рабочего процесса, может наступить время, когда некоторые изменения будут иметь быть сделанным в какой-то ветви, которая должна быть принесена в другую ветвь, и о боль. Для меня, это то, что убивает раскадровки.

по мере развития времени и работы я нахожу для себя, что раскадровки отлично подходят для прототипирования. Возможность получить вещи происходит быстро является огромным преимуществом раскадровки. Там много скорости в использовании их. Но скорость приходит по цене. Когда дело доходит до написания "реального" кода для какого-то проекта, я просто буду придерживаться xibs, потому что пока это может быть больше работы, это более гибкий маршрут, который просто лучше работает в больших командах или с течением времени.

обновление 2015-04-07 еще одно обновление, потому что проекты последних нескольких месяцев заставили меня использовать раскадровки, которые предоставили больше информации.

во-первых, некоторые вещи будут требовать того или иного подхода. Например, по-видимому, были некоторые ошибки edge case при работе с классами размеров в xibs, которые не существовали, делая то же самое в a раскадровка. Поэтому, если вы пострадаете от ошибок, это может заставить вашу руку так или иначе. Другое-помнить, что раскадровки обычно работают на UIViewController уровне, поэтому если вам нужно сделать что-то подобное было!--7--> или UICollectionViewCell чтобы загрузить, это, вероятно, будет лучше обслуживаться xib.

во-вторых, и я не знаю, почему это не пришло мне в голову сначала, но есть ничего это требует, чтобы вы использовали единственную раскадровку для всего вашего проекта! Я думаю природа раскадровки позволяет людям тяготеть таким образом, но мы не должны ничего помнить об этом (что я знаю).

то, что я нашел, хорошо работает, как правило, подходит к каждой "группировке представлений" на раскадровку. То есть, часто ваши ViewControllers имеют тенденцию быть изолированными и заканчиваются 1 на раскадровку (или xib). Но у вас может возникнуть ситуация, когда у вас есть два тесно связанных ViewControllers, и имеет смысл поместить их в одну раскадровку, особенно потому, что тогда вы можете легко подключить вещи между ними, такие как сегменты.

главное преимущество для нескольких раскадровок? Работа в командах. Таким образом, Фред может работать над своей раскадровкой, а Вильма может работать над своей раскадровкой, и нет никаких сильных проблем слияния или координации работы! Использование нескольких раскадровок (и, как правило, 1 ViewController на раскадровку) оказало огромную помощь в использовании раскадровок в команде разработчиков из нескольких человек.

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

2015-09-21 обновление теперь, когда Apple выпустила Xcode 7, есть даже больше причин, чтобы принять раскадровки, как Apple, работает, чтобы преодолеть недостатки.

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

еще одно улучшение заключается в том, что вы можете создавать автономные UIView занятия в раскадровке. Однако на момент написания этой статьи у меня были смешанные результаты. Простые случаи работают нормально, но некоторые более "сложные" вещи не сделали. Например, у меня был UIViewController С a UITableView в ее рамках. Поскольку это должна была быть простая таблица с 5 статическими ячейками, я просто создал экземпляр 5 UITableViewCells как часть ViewController в раскадровке. Казалось бы, работает, но тогда во время выполнения ничего не будет загружаться и отображаться; переместил UITableViewCells в xib, и все работало. Я не уверен, что я делал что-то неправильно или что это может быть, так что YMMV. Но все же, даже если есть только некоторые причуды, со временем я уверен, что Apple разрешит их, а затем еще один барьер против раскадровки будет падение. Я хотел сказать, что если вам нужна такая поддержка, вы должны попробовать его и посмотреть, как она идет для вас. Это очень многообещающе.

все больше и больше, раскадровки складывается отлично.