模型 - 视图 - 控制器

时间:2012-08-29 16:18:21

标签: iphone xcode ipad

是的,我是Xcode的菜鸟。现在我正在通过Big Nerd Ranch IOS编程手册,我只需要对模型 - 视图 - 控制器位进行一些澄清。

模型类称为'CellData',一个NSObject 查看类'CellView',一个UIView Controller类被称为'CellAppDelegate',一个UIResponder。

DrawRect方法使用基于CellData类数据的颜色进行大量绘制。到目前为止,似乎的所有内容都告诉我,我不应该从我的'CellView'类中调用'CellData'方法。通常是的,当你刚刚使用带有TestFields的UIButton时,是的,非常有意义。

在这种情况下,我必须将'CellData'中的值传递给'CellView'最多6000次才能刷新View。继续在使用CellAppDelegate之间来回调用是否仍然有意义(对计算机来说似乎需要做更多工作),还是我真的“允许”从CellData中检索值?

2 个答案:

答案 0 :(得分:2)

你自己已经回答了你的问题。不,每次渲染6000个调用都不是正确的事情,特别是在一个表格视图单元格上,它会经常重绘。

就个人而言,我看到控制器的工作是从模型层(业务逻辑等发生)请求数据对象并将它们传递给视图。因此,在您的情况下,我只是将数据对象传递到您的单元格。 (我会把它作为你的单元格中的一个属性,使用一个也叫[self setNeedsDisplay];的setter来触发重绘)

话虽这么说,我也倾向于支持模型层给出不可变数据对象,所以控制器/视图不能对它们做任何错误:)使用这种方法,如果控制器想要编辑数据对象,它会必须在模型层中调用方法才能这样做。

当然,这只是我个人的观点和建筑选择。显然对于现有的UI对象(即UILabel等),我无法传入数据对象,我必须直接从我的视图控制器设置text属性。


PS CellAppDelegate是视图控制器的错误名称 - 自定义是使用ViewController结束类名,因此它将是CellAppViewController。这个命名方案使得在一周左右的时间内回到您的代码非常容易,并且仍然可以理解所有内容:)

答案 1 :(得分:0)

  

到目前为止的所有内容似乎告诉我,我不应该从我的'CellView'类中调用'CellData'方法。

这听起来像是一种误解。像CellView这样的东西被控制器传递给一个CellData是非常常见的。视图可以自由查询它负责显示的模型对象。这不违反MVC。它通常不应该到模型对象,也不应该通常与其他模型对象进行对话。

相关问题