На просторах интернета я наткнулся на такой месседж:
Для кого-то это может показаться очевидным, а кто-то и вовсе об этом не задумывался
iOS разработчики делятся на три лагеря:
- Верстают интерфейс вручную
- Используют только xib
- Используют storyboard/xib/код в зависимости от ситуации (я за последних)
Первые считают что интерфейс собранный вручную (кодом) работает быстрее.
Тут самое время задался вопросом что такое xib?
Xib - это xml разметка которая при сборке проекта компилируется в nib, всё просто:
Nib в свою очередь не что иное, как архив классов (NSKeyedArchiver), в итоге мы получаем всё те же классы как если бы писали их вручную, только заархивированные. И разархивированные и написанные вручную классы работают одинаково быстро и ничем друг от друга не отличаются. Тормозить это может при разархивации (загрузки классов в память), но если xib будут небольшие это несущественно, по сравнению с ручной версткой.
Разработчики из второго лагеря предположительно знают об этом и активно пользуются xib (ранее nib в чистом виде до Interface Builder 3) но уверены что storyboard это жутко тормозная штука.
Тут самое время задался вопросом что такое storyboard?
Storyboard - это та же xml разметка которая компилируется в пакет storyboardc внутри которого несколько nib, например UITableViewController компилируется в два nib:
И каждый последующий контроллер в storyboardc это несколько nib файлов. Несколько их по причине что при разархивации nib, в память грузится сразу всё что в нём есть (никакого lazy loading). Например два контроллера в xib будет загружены сразу, два контроллера в storyboard по мере необходимости. Storyboard как дальнейшее развитие xib просто физически не может быть более тормозным, при работе только с xib как раз приходится задумываться что и когда грузить и сколько xib’ов надо, в то время как storyboard делает это за вас.
Что же тогда тормозит, откуда берутся мифы?
Допустим вы начинающий разработчик, отрываете интерфейс билдер, создаёте UITableViewController и делаете такое (86 констрейнтов):
Естественно при скролле у вас это будет тормозить, почитав интернет (индусов на stackoverflow) вы приходите к выводу что такое нужно писать вручную, само собой и все фреймы вы рассчитываете вручную (без autolayout) и да оно перестаёт тормозить, как раз за счёт этих фреймов и того что вы их рассчитали один раз при загрузку UITableViewCell!
И вы такой, да storyboard (интерфейс билдер) это сплошные тормоза, буду я всё ручками лучше писать
P.S. Наболело! После таких дятлов разбираться в тоннах их быдлокода сплошная боль, так они еще и в интернетах свою тупость пропагандируют (надеюсь никого не обидел).
P.P.S. За интерфейс написанный руками платят столько же что и собранный в интерфейс билдере!
P.P.P.S. В интерфейс билдере наглядна видна архитектура вашего приложения (что куда переходит и что где открывается/вызывается и какие классы в этом участвуют), в таком проекте гораздо проще разобраться!