在Xcode中使用Storyboard的iOS应用程序的MVC设计模式后,我注意到我可以将UILabel,UIImageViews等IBOutlets放入ViewController或UIView本身。
情景1:
模型类 - >视图控制器(IBOutlets) - >故事板场景中的UIViews
ViewController(VC)从Model
VC中的IBOutlets用于设置故事板中各种UIViews中的文本和图像
情景2:
模型类 - >查看控制器 - >故事板中的UIViews(IBOutlets)
VC从模型中获取数据
VC调用每个UIView子类中的方法
每个UIView子类中的那些方法通过UIView中的IBOutlets设置相关UIView中的文本和图像
我发现当每个视图中有许多UIViews和UILabel以及UIImageView时,场景2更易于管理。另一种方法可以在单个View Controller中导致大量IBOutlet。
使用Storyboard时最好遵循哪种方法?
答案 0 :(得分:1)
您的观察是正确的,第二种情况导致设计更易于管理。
两种情况之间的区别主要在于它们使用封装:第一种情况封装在View + View Controller的级别上,让控制器可以自由访问逻辑上应该只是视图一部分的内容,而第二种情况正确限制IBOutlets
对视图类的访问,强制视图控制器通过您在视图中公开的方法与它们进行交互。
因此,第一种情况会在视图与其控制器之间产生紧密耦合,而第二种情况会显着减少这种耦合。
当然有一个权衡:你用更多代码支付减少的耦合。在某一点上,无关紧要:当您的视图及其控制器相对较小时,很容易将视图及其相关视图控制器的组合作为整体对象进行管理。随着视图复杂性的增加,使用第二种方案的好处变得更加明显。这适用于封装的所有用途,不仅适用于iOS场景中的MVS:项目越大 - 使用适当的封装获得的回报越多。