哪种方式更高效?StoryBoard 还是 XIB?

38

我的问题略有不同,与我的标题所示不同。我已经使用过xib。现在我正在尝试使用故事板。

我的问题是,如果我们从一个类导航到另一个类,故事板是否能够提供更好的内存管理优势。

假设我们有两个视图控制器:ViewControllerA和ViewControllerB。

我们正在尝试通过ViewControllerA --> ViewControllerB进行导航。

现在,在Xib中,我们的方法如下:

ViewControllerB *VCB = [ [ViewControllerB alloc] init];
[self.navigationController pushViewController: VCB Animated: YES];

在故事板中的哪里?

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"Second"])
    {
        SecondViewController *objSecond = (SecondViewController*)[segue destinationViewController];

    }
}

那么,请这样做,

[self performSegueWithIdentifier:@"Second" sender:self];

所以,我的问题是我们在Xib中分配了我们的类,在storyboard中没有。那么在storyboard中有没有内存分配的优势?


1
在Storyboard中,所有的事情都由编译器自己处理。但是内存分配和释放也会在那里发生。 - Anoop Vaidya
那么,在内存管理故事板中,与Xib相比表现相同吗? - Vishal Sharma
5个回答

48

我的观点是一个专业的开发者必须使用xibs,但对于编程新手、爱好者来说,如果使用storyboard可能会有所帮助。

Storyboard

在用一个单一的storyboard进行了三年项目工作后,我可以说它有很多缺点

1)即使是非常小的东西(其中每个视图都必须重新构建),构建速度真的非常非常慢。即使有8或16 GB内存的iMac,如果Storyboard变得更大,编辑也非常困难。甚至打开它都很难。

2)没有重用性。你无法立即将视图/视图控制器及其视图导入到另一个项目中。它将与其他视图控制器、视图或线路连接起来,使它成为一个大的“不要碰”的东西。

3)当项目变得更大时,即使添加或编辑最小的布局约束,也会出现很多滞后,这会让你从不想去碰它。

4)如果你使用storyboard的自动单元格添加功能,则无法在两个位置使用相同的构建单元格。

优点:

1)自动单元格(但这也是一个缺点,因为一个单元格不能直接被重复使用到另一个视图中)

2)线路等使得某人可以通过一个单一的视图理解正在发生什么。

Xibs:

1)完全可移植。

2)打开/编辑/构建比变得更大的storyboard快得多。

结论:

如果你是一位业余开发者,只是为了玩而制作一个应用程序,那么你应该使用storyboard,因为它能让你更容易地理解事情。但是,如果你是一名专业的开发者,你必须使用xibs来进行VCs、Cells等,因为这是唯一能真正使它们具有重用性和可移植性的方法,以便在下一个项目中节省大量时间,甚至在需要进行小改动或重新构建storyboard时也可以如此。

我认为xibs更具“重用性和可移植性”的原因如下:

编程中的事物必须被保存在不同的模型、文件、实体和模块中。每个事物应该尽可能少依赖其他事物。

33
这个答案假设整个项目只有一个storyboard。你可以轻松地将其分成每个1-4视图控制器的一个storyboard(相关的或者是模块的一部分),这样你就可以获得所有新功能而不会遇到速度和协作问题。 - Tiago Lira
4
但如果你分成许多部分,似乎更像是一种基于XIB的解决方案。你不觉得吗?除此之外,你没有太多基于XIB的优势。我认为你应该重新考虑这个问题,特别是当你开始认为拆分更好时 ;) ...谢谢。 - Giorgos Ath
6
@GiorgosAth,使用多个storyboard比每个UIViewControllers都有一个xib更好。我曾经在一个项目中工作过,其中至少有40个UIViewControllers,让我告诉你,构建(归档等)10个storyboard比构建40个xibs要快得多。将其想象成这样,对于一个功能你创建一个storyboard,例如:登录、注册、交易、设置等。顺便说一句:我在我的项目中同时使用xibs、storyboards和编码的UIViewControllers - Zonily Jame
如果你关心速度,可以使用多个故事板,每个故事板中只包含一个视图控制器。 - Jeff

43

很难说哪种方式是最好的,因为基于团队需求才能判断使用哪种更好。

如果你是一名独立开发者,使用storyboard是一个不错的选择,因为它消耗的时间更少。如果团队中有许多开发者,使用xib就比较好了,否则,合并模块或任务就不容易。

xcode-using-storyboards-and-xibs-versus-creating-views-programmatically

使用XIBs

优点:

  • 可以快速搭建UI

  • 对于屏幕数量较少的小型应用程序,实现直接简单明了

  • 可以针对不同的本地化(例如语言或国家)使用单独的XIBs

  • 非常擅长布置元素和视觉上发现错误,进行微调布局容易

缺点:

  • 在团队环境中处理冲突很难(很难进行差异、合并和阅读)

  • 高度动态的视图无法描述为XIB

  • 在性能方面,与通过代码创建视图相比较慢,因为需要从磁盘读取和分析/解析xib。

  • XIB缺乏可以在代码中自定义的东西,例如Quartz内容(阴影,圆角)

  • 难以调试(例如,如果您忘记在接口生成器中进行连接或进行错误的连接)

Storyboards

优点:

  • 对于屏幕数量较少且导航要求在视图之间相对简单的应用程序,storyboards很不错

  • 您可以通过模拟应用程序的流程来省去大量(甚至是任何)编码的工作

  • 缺点:

    • Storyboard不兼容iOS 5之前的版本,这使得支持iOS 4.3成为不可能

    • 在团队环境中并行工作很困难,因为每个人都会修改同一个文件

    • 类似地,在GIT中合并冲突的Storyboard将是一件痛苦的事情

    • 使用故事板时,人们经常会遇到Xcode中的错误(例如由于不一致性而频繁清空DerivedData文件夹)


    4
    被踩了!1)故事板合并很困难,取决于故事板包含的视图数量;2)即使只有少量控制器,故事板的性能也不如xib - 更改一个元素的颜色可能需要等待相当长的时间才能更新。3)调试一个视图还是许多视图(故事板)和许多链接的代码文件更难?4)你可以模拟应用程序流程...但如果它只是线性的,并且未来不会有严重的变化,这是非常罕见的情况。 - Vyachaslav Gerchicov
    1
    有人能否就2021年的情况发表评论吗? 将Storyboard拆分成多个文件,是否解决了所有提到的问题? 在MacOS上,我没有看到比使用XIB更好的选择。但现在我必须做iOS。 - Lothar
    我最近开始在一家开发了约十年的MacOS软件公司工作,目前有40-50名开发人员并行添加和修补代码。即使在2019年平均配备16GB RAM的MacBook Pro上,该项目中的某些XIB文件在IB中也变得缓慢。因此,我们必须将它们拆分成几个较小的部分,并在运行时将它们拼接在一起。从我的角度来看,我清楚地看到了XIBS提供的模块化优势。 - Jan Z.

    5

    比较XIB和storyBoard,storyBoard更快。

    但实际上,在程序中完全使用代码编写时才更快。

    在storyBoard中,当我们编译所有storyBoard时,它会归档到文件中。 然后解档再运行应用程序。但是,在编程中,类只在运行时分配。

    建议使用storyboard进行项目开发。


    0

    现在,苹果工程师强烈推荐使用故事板。所有内容都是集中管理的,内存管理由编译器完成。然而,在某些情况下,设计师会要求推送控制器,这并没有问题。但是,故事板被推荐作为MVC模式中易于理解的视图部分。


    5
    请问您能否提供苹果公司推荐使用Storyboard以及原因的相关来源?谢谢! - Kiran Ruth R
    2
    对于iOS开发者来说,使用storyboards是设计用户界面的推荐方式。请参考:https://developer.apple.com/library/content/documentation/General/Conceptual/DevPedia-CocoaCore/NibFile.html - user3344977
    2
    这并没有涉及到内存管理。这个链接提到了类似的内容,但是说“因为它们使您能够在一个画布上可视化用户界面的外观和流程”。如果这是唯一的原因,那就不够好,因为它引入了许多缺点。 - shim

    -3

    就内存利用而言,使用Storyboard会是更好的选择,尽管Storyboard相对于xib文件还有其他优点,但Apple也建议使用Storyboard而不是xib文件。


    7
    你能提供一个苹果公司推荐使用Storyboard的来源吗?谢谢! - Kiran Ruth R

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接