我打算学习使用Story Boards开发应用程序。任何人都可以在使用StoryBoards时发布一些优点和缺点吗?
我打算学习使用Story Boards开发应用程序。任何人都可以在使用StoryBoards时发布一些优点和缺点吗?
在iOS编程中使用Storyboard而不是xib文件有什么好处?
我认为这些链接很有用并且与您的问题相关。就个人而言,我认为故事板比nib更好,因为它们消除了在视图之间编码转换的需要(除非你使用CA的自定义转换),并且它们也具有nib文件的所有功能。
希望这有帮助。
- - - - - -编辑 - - - - - -
以下是我发现的一些链接:
这个讲的是一些使用故事板的缺点。
iOS 5上的UIStoryboard:Good,The Bad和'This Plain Sucks'
这个主要是关于好处。 iOS 5.0故事板比传统UI布局有什么优势?
这主要是利弊。不要使用故事板。这是他们的问题列表,复制自 iraycd:
故事板在运行时失败,而不是在编译时失败:你有一个segue名称的拼写错误或在故事板中连接错了?它会在运行时爆炸。您使用故事板中不再存在的自定义UIViewController子类?它会在运行时爆炸。如果你在代码中做这些事情,你会在编译期间尽早发现它们。 更新:我的新工具 StoryboardLint 大多数解决了这个问题。
故事板快速混乱:随着项目的增长,您的故事板越来越难以导航。此外,如果多个视图控制器有多个segll到多个其他视图控制器,您的故事板很快就会开始看起来像一碗意大利面,你会发现自己放大和缩小并滚动到处寻找你正在寻找的视图控制器为了找出什么segue点在哪里。 更新:这个问题大多可以通过将你的故事板分成多个故事板来解决,如中所述 Pilky的这篇文章 和 罗伯特布朗的这篇文章。
故事板使团队合作变得更加困难:因为您的项目通常只有一个巨大的故事板文件,让多个开发人员定期对该文件进行更改可能会令人头疼:需要合并更改并解决冲突。当发生冲突时,很难说它是如何解决的:Xcode生成故事板XML文件,并没有真正设计目标,人类必须阅读,更不用说编辑它了。
故事板使代码审查变得困难或几乎不可能:同行代码评论对您的团队来说是一件好事。但是,当您对故事板进行更改时,几乎不可能使用其他开发人员查看这些更改。所有你能提到的是一个巨大的XML文件的差异。解读真正改变的东西,如果这些改变是正确的,或者他们是否破坏了某些东西,那真的很难。
故事板阻碍了代码重用:在我的iOS项目中,我通常会创建一个类,其中包含我在整个应用程序中使用的所有颜色和字体,边距和插图,以使其具有一致的外观和感觉:如果我必须调整其中任何一个,这是一个单行更改整个应用程序的值。如果在故事板中设置了这些值,则复制它们,并且需要在要更改它们时查找每个事件。你很想念一个机会很高,因为在故事板里没有搜索和替换。
故事板让你做两次事:您是否正在构建一个可在iPad和iPhone上运行的通用应用程序?使用故事板时,通常会有一个用于iPad版本的故事板和一个用于iPhone版本的故事板。保持同步需要您在两个位置执行每个UI或应用程序工作流程更改。好极了。 更新:在iOS 8和Xcode 6中,您可以使用单个Storyboard for iPhone和iPad。
故事板需要不断的上下文切换:我发现自己在代码中的工作和导航速度比在故事板中快得多。当您的应用程序使用故事板时,您不断切换上下文:“哦,我想点击此表视图单元格来加载不同的视图控制器。我现在必须打开故事板,找到正确的视图控制器,创建一个新的segue到另一个视图控制器(我也必须找到),给segue一个名字,记住那个名字(我不能在故事板中使用常量或变量),切换回代码并希望我不输入错误的名字这对我的prepareForSegue方法来说是个塞浦路。我希望我能在这里输入那3行代码!“不,这不好玩。在代码和故事板之间(以及键盘和鼠标之间)的切换会变得很快,并且会使您慢下来。
故事板很难重构:当您重构代码时,您必须确保它仍然符合您的故事板所期望的内容。当您在故事板中移动内容时,只会在运行时发现它是否仍然适用于您的代码。我觉得好像必须让两个世界保持同步。它感觉很脆弱,并且在我的拙见中不鼓励改变。
故事板无法搜索:当您使用故事板时,Xcode中的项目范围搜索实际上不是项目范围内的搜索。它们不包含在搜索中。因此,当您从代码中删除自定义类或重命名它时,您必须手动浏览故事板或查看其原始XML以确保它与您的代码更改相同。不,先生,我不喜欢它。 更新:故事板可在Xcode 6中搜索。
故事板不够灵活:在代码中,你基本上可以做任何你想做的事情!使用故事板,您只能使用代码中可以执行的操作的子集。特别是当你想用动画和过渡做一些高级的事情时,你会发现自己“在战斗故事板上”才能让它发挥作用。
故事板不允许您更改特殊视图控制器的类型:你想改变一个 UITableViewController
变成一个 UICollectionViewController
?或者变成平原 UIViewController
?故事板中不可能。您必须删除旧视图控制器并创建一个新视图控制器并重新连接所有segues。在代码中进行这样的更改要容易得多。
故事板为您的项目增加了两个额外的责任:(1)生成故事板XML的Storyboard Editor工具和(2)解析XML并从中创建UI和控制器对象的运行时组件。这两个部分都可能存在无法修复的错误。
故事板不允许您将子视图添加到 UIImageView
:谁知道为什么。
故事板不允许您为单个View(-Controller)启用自动布局:通过选中/取消选中Storyboard中的“自动布局”选项,更改将应用于Storyboard中的所有控制器。 (感谢SavaMazăre这一点!)
故事板具有更高的破坏向后兼容性的风险:Xcode有时会更改Storyboard文件格式,并且无法保证您可以打开今天几年甚至几个月后创建的Storyboard文件。 (感谢思想在这一点上的进步。 查看原始评论)
这是麦当劳:用史蒂夫乔布斯关于微软的话来说: 这是麦当劳(视频)!