寻找有关如何管理大型UIViewController类的代码的良好指南

时间:2012-01-12 14:50:06

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

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

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

使用类别是解决方案,但是,我遇到了麻烦 - 当我尝试在我的一个类别标题中创建IBOutlet时,XCode编译器不断给我提供有关ivars和outlet的错误和警告。在我的笔尖中,我有大量需要出口的对象,如果可能的话,我宁愿不必在一个巨大的代码文件中定义它们。

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

我的代码还不是很笨拙,但我真的很想重新开始重构,以便在它包含100个方法和1000行代码时更易于管理。

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

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

这是一个非常复杂的问题。但是,根据我的经验,我发现IB对我来说比在这种复杂情况下更值得头疼。我建议在这种情况下忘记IB,只需在代码中创建视图。 IB真的应该减轻布局,风格等一些更普通的任务。

我建议将所有视图放在他们自己的项目文件中,因为这为我付出了代价......没有比滚动1000行代码更难以找到你需要的东西......更糟糕的是,在装订线中使用那个可怕的代码折叠小部件。