【问题标题】:Looking for good guidelines on how to manage code for large UIViewController classes寻找有关如何管理大型 UIViewController 类的代码的良好指南
【发布时间】:2012-01-12 14:50:06
【问题描述】:

我一直在从事我的第一个 XCode/iOS 项目,到目前为止,这是一次愉快的经历。目前,我正在处理一个 Nib 文件,该文件充当其他视图的主要显示。在这个 Nib 文件中,我有一个主要的 UIView,在它旁边我正在设计一系列其他七个视图。在运行时,我会在必要时在容器 UIVie 中交换这七个视图,该容器位于我的主 UIView 上。

在我在 IB 中设计的总共 8 个视图中,我有大量的按钮、图像和其他需要链接到 IBOutlets 的对象。随着这个项目越来越大,如果我可以将我的类拆分到多个代码文件中会很有帮助。

使用类别是解决方案,但是,我遇到了一个烦恼——当我尝试在我的一个类别标题中创建一个 IBOutlet 时,XCode 编译器不断给我关于 ivars 和 outlets 的错误和警告。在我的 Nib 中,我有大量需要插座的对象,如果可能的话,我宁愿不必在一个巨大的代码文件中定义所有对象。

但是,我知道我必须在自己的限制范围内工作,所以我的问题与询问如何将 IBOutlet 添加到类别有点不同。相反,我想知道在多个代码文件中拆分大型 UIViewController 类的最佳实践是什么?在进行界面设计时,objective-c 有哪些限制以及构建代码的最佳方式是什么?

我的代码还不是很笨拙,但我真的很想开始重组它,这样当它由 100 条方法和 1000 行代码组成时,它会更易于管理。

任何指针都会有所帮助。谢谢!

【问题讨论】:

    标签: objective-c xcode class coding-style objective-c-category


    【解决方案1】:

    您可以创建一个包含多个控制器对象的 NIB,每个控制器对象都管理相关的视图,这将有助于使您的代码更易于管理。缺点是加载大型 NIB 时您的内存占用会更大。

    要实现这一点,请在具有相关 IBOutlets 的单独类中定义控制器,然后将 NSObject 从对象托盘(UILabel、UIButton 等...所在的位置)拖到 IB 中。然后对于每个对象,将其类定义到正确的控制器,您将可以访问所有正确的出口和操作。然后,您可以将控制器挂接到单个 UIViewController 中,以控制它们之间的交互方式。

    不过,首选方法是为单独的控制器使用单独的 NIb,并将它们全部作为 UIViewController 子类。如果你迁移到 iOS5,他们已经用 Storyboards 取代了 IB 中的 NIB。这些允许您在单个 IB 文件中拥有单独的 UIViewController,但是它们在内存使用方面更有效,因为它们不会将整个对象树保存在内存中。

    【讨论】:

    • 我来看看故事板。谢谢!
    • 阅读这篇文章 (toxicsoftware.com/uistoryboard-issues) 后,我得出的结论是我宁愿避免使用情节提要。考虑这是一个故事板前的问题。
    • 那么你的单个NIB中的多个控制器对象,或者单独的NIB和VC是要走的路。
    【解决方案2】:

    这是一个非常重要的问题。但是,根据我的经验,我发现在这样的复杂情况下,IB 给我带来的头痛比它的价值还要多。我建议在这种情况下忘记 IB,只需在代码中创建您的视图。 IB 确实应该减轻一些更平凡的布局、样式等任务。

    我建议您将所有视图都放在他们自己的项目文件中,因为这对我来说已经得到了回报……没有什么比滚动 1000 行代码来查找所需内容更痛苦的了……更糟糕的是,在排水沟中使用那个可怕的代码折叠小部件。

    【讨论】:

    • 我同意,这是一个有点牵强的问题。尽管如此,仍有一些开发人员必须在团队中工作,并且他们必须一起从事大型项目。我会假设某些人或一群人已经为自己的理智提出了这些类型的指导方针。是的,我考虑了您的路线,但是,在代码中概述所有这些屏幕将花费大量时间。我的对象几乎从不在它们各自的视图中移动,因此 IB 似乎是一个最佳的轮廓工具。尽管如此,我还是考虑过为每个控制器创建单独的控制器/笔尖。我希望避免这种情况。
    猜你喜欢
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-10
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多