诚然,我们中的许多人会稍微模糊 MVC 线条,并将少量与视图相关的代码放入我们的控制器中。我个人认为这很好。这并没有削弱我们仍然在很大程度上遵循 MVC 模式的事实(并且 Cocoa 类正在为视图做繁重的工作)。但是,对我来说,如果与视图相关的代码超出了琐碎的范围,我发现自己选择子类化视图。
会有人在宗教上分等级UIView
,但我认为有一点实用主义是有道理的。如果您要添加少量与视图相关的代码,是否通过将其抽象为新的UIView
子类来提高代码的易读性?不总是。但我认为这种情况(有人在他们可能不需要子类时进行子类化)远不如相反的问题(有人在他们可能应该有子类时未能子类化)常见。
所以,你问:
我认为没有必要这样做 [子类化 UIView],除非您在多个地方重用相同的 UIView 或进行自定义绘图。
我同意重用和自定义绘图(例如drawRect
)是两个很好的例子。但我还要添加一个原则,如果子类化会提高代码的易读性,因为视图足够复杂(当然是主观调用),那么我将子类化。两个例子:
我在应用程序中有一个日历视图,视图控制器变得笨拙,管理一个月中不同日子的所有单元格,等等。所以通过子类化UIView
,我能够抽象出所有子视图的丑陋细节由日历视图组成。我不仅对主要的“月”视图进行了子分类,还对“月”视图中的“日”视图进行了分类。本身没有重用。没有自定义图纸。但这显然是正确的做法。代码更加清晰易读。
我越来越多地UITableViewCell
为我的表格视图子类化。在我的第一个项目中,我会让表格视图控制器cellForRowAtIndexPath
完成该单元格的所有复杂组合和布局。现在我的代码更容易理解了,因为UITableViewCell
在我不使用其中一种标准单元格类型的任何情况下,我都会例行地将其子类化。
简而言之,虽然我同意不应该被迫UIView
为每个视图控制器子类化 a,但我个人尝试在视图达到一定复杂程度时这样做。我让代码易读性支配我的实践。我发现我比以前更多地对视图进行子类化,但绝不是我一直都在这样做。
归根结底,虽然您不需要一直对视图进行子类化,但我个人认为许多开发人员在应该有子类化视图(或模型)时犯了错。他们不应该出于某种符合 MVC 的狂热愿望而这样做,而是他们应该问自己,如果他们适当地对视图或模型进行子类化,他们的代码是否更易于阅读和维护。