使用故事板的利弊

时间:2012-06-03 16:40:55

标签: iphone ios5 storyboard uistoryboard

我打算学习使用Story Boards开发应用程序。任何人都可以在使用StoryBoards时发布一些优点和缺点吗?

2 个答案:

答案 0 :(得分:11)

When to use Storyboard and when to use XIBs

What are the benefits of using Storyboards instead of xib files in iOS programming?

iphone-sdk-development

我认为这些链接对您的问题很有帮助。就个人而言,我认为故事板比nib更好,因为它们不需要在视图之间编码转换(除非你使用CA的自定义转换),并且它们也具有nib文件的所有功能。

希望这会有所帮助。

----------- ----------- EDIT

以下是我发现的更多链接:

这个讲的是使用故事板的一些缺点。

UIStoryboard on iOS 5: The Good, The Bad, and the 'This Plain Sucks'

这个主要是关于好处。 What are the advantages of iOS 5.0 storyboarding over traditional UI layout?

答案 1 :(得分:0)

主要是缺点。不要使用情节提要。以下是从iraycd复制而来的问题列表:

  • 故事板在运行时发生故障,而不是在编译时发生:您在故事板上有错字或在故事板上错了吗?它将在运行时爆炸。您使用了故事板中不再存在的自定义UIViewController子类?它将在运行时爆炸。如果您在代码中执行此类操作,则将在编译期间及早发现它们。 更新 :我的新工具 StoryboardLint 主要解决了此问题。

  • 故事板变得令人困惑:随着项目的发展,故事板越来越难以导航。另外,如果多个视图控制器与多个其他视图控制器有多个关卡,则情节提要很快就会开始看起来像一碗意大利面,并且您会发现自己放大和缩小并在各处滚动查找所要查找的视图控制器寻找并找出什么塞格点在哪里。 更新 :如this article by Pilkythis article by Robert Brown所述,通常可以通过将情节提要板拆分为多个情节提要板来解决​​此问题。

  • 故事板使团队工作更加困难:由于通常项目中只有一个庞大的故事板文件,因此让多个开发人员定期对该文件进行更改可能会令人头疼:更改需要合并并解决冲突。当发生冲突时,很难说出解决方案的方式:Xcode生成情节提要XML文件,并且它的设计并不是以人类必须阅读为目标,更不用说对其进行编辑了。

    < / li>
  • 故事板使代码审查很难或几乎不可能:对您的团队来说,对等代码审查是一件很棒的事情。但是,当您对情节提要进行更改时,几乎不可能与其他开发人员一起查看这些更改。您所能提供的只是一个巨大的XML文件的差异。破译真正改变的内容以及这些改变是否正确或是否破坏了某些东西确实很困难。

  • 故事板阻碍了代码的重复使用:在我的iOS项目中,我通常会创建一个类,其中包含我在整个应用中使用的所有颜色,字体,边距和插图,以使其具有一致性外观:如果我必须为整个应用调整这些值中的任何一个,那就只是一行更改。如果在情节提要中设置了此类值,则将其复制,并在要更改它们时需要查找所有单个出现的值。您很可能会错过其中一个机会,因为故事板中没有搜索和替换内容。

  • 故事板让您完成两次操作:您是否正在构建同时在iPad和iPhone上运行的通用应用程序?使用情节提要板时,通常会有一个iPad版情节提要板和iPhone版故事情节提要。要使两者保持同步,您需要在两个位置进行每个UI或应用程序工作流更改。好极了。 更新 :在iOS 8和Xcode 6中,您可以为iPhone和iPad使用单个Storyboard。

  • 故事板需要不断的上下文切换:我发现自己在代码中的工作和导航速度比故事板快得多。当您的应用使用情节提要时,您会不断切换上下文:“哦,我想在此表视图单元上点击以加载其他视图控制器。现在,我必须打开情节提要,找到合适的视图控制器,创建新的界面到另一个视图控制器(我也必须找到),给segue一个名称,记住该名称(我不能在情节提要中使用常量或变量),切换回代码并希望我不要键入错误的名称这是我的prepareForSegue方法的序号。我希望我能在我现在所在的位置键入那三行代码!”不,不好玩。在代码和情节提要之间(以及在键盘和鼠标之间)切换会很快变老,并且使您减速。

  • 故事板很难重构:重构代码时,必须确保它仍然与故事板的期望值匹配。在情节提要中移动内容时,只有在运行时仍能与您的代码一起使用,您才会发现它。在我看来,我好像必须保持两个世界同步。我的拙见使我感到脆弱和沮丧。

  • 故事板不可搜索:使用情节提要板时,Xcode中的项目范围搜索实际上并不是项目范围内的搜索。它们不包括在搜索中。因此,当您从代码中删除自定义类或对其进行重命名时,您将必须手动浏览情节提要或查看其原始XML,以确保它与代码更改保持一致。不,先生,我不喜欢。 更新 :故事板可以在Xcode 6中搜索。

  • 故事板不那么灵活:在代码中,您基本上可以做任何想做的事情!使用情节提要板,您只能使用代码中的一部分。尤其是当您想对动画和过渡进行一些高级操作时,您会发现自己正在“与情节提要进行斗争”以使其发挥作用。

  • 故事板不允许您更改特殊视图控制器的类型:要将UITableViewController更改为UICollectionViewController吗?还是变成普通的UIViewController?在情节提要中不可能。您必须删除旧的视图控制器并创建一个新的视图控制器,然后重新连接所有segue。进行这样的代码更改要容易得多。

  • 故事板为您的项目增加了两个额外的负担 :( 1)故事板编辑器工具可生成故事板XML,以及(2)运行时组件可解析XML并创建UI和控制器对象。这两个部分都可能包含无法修复的错误。

  • 故事板不允许您向UIImageView 添加子视图:谁知道为什么。

  • 故事板不允许您为单个视图(控制器)启用自动布局:通过选中/取消选中情节提要中的“自动布局”选项,更改将应用​​于所有情节提要中的控制器。 (感谢SavaMazăre!)

  • 故事板具有更高的破坏向后兼容性的风险:Xcode有时会更改情节提要的文件格式,并且不保证您将能够打开自己创建的情节提要的文件从现在到几年甚至几个月。 (感谢这一点的先进思想。See the original comment

  • 是麦当劳:用史蒂夫·乔布斯(Steve Jobs)关于微软的话说:It's McDonald's (video)