MVC - 视图是否可以继续引用其视图控制器并处理数据?

0xS*_*ina 0 model-view-controller cocoa-touch objective-c uiviewcontroller ios

使用Cocoa-Touch,但这是一个普遍的问题.

视图是否可以保持对其视图控制器的引用并处理数据?我最近遇到了一个代码库,通过应用程序执行此操作 - 例如,有一个表视图控制器,它的单元格具有对视图控制器的弱引用(因此没有保留周期).单元格通过提供新的视图控制器

[self.parentVC presentViewController.....];
Run Code Online (Sandbox Code Playgroud)

并以类似的方式解雇它.此外,它们还处理数据/网络操作的变化.

直到我看到这个,我习惯于为每个单元创建协议并通过它们与父视图控制器通信.使用直接引用视图控制器的方法摆脱了所有协议.

对我来说,这似乎非常糟糕,但不确定它是否很常见.

apo*_*che 5

即将到来的答案是关于Apple处理模型视图控制器的方式,这与其他SDK(ex Qt)完全不同.

这绝对是不好的做法.它可以归结为一个问题,如果你认为这是一个好主意,那么为什么苹果已经没有在UIView课堂上添加这个参考?

如果你看一下Apple如何使用模型视图控制器,模型非常清楚:

在此输入图像描述

视图与控制器通信以发出状态变化信号,控制器在需要时更新模型并相应地更新视图.您永远不会找到Apple的文档或示例,您的视图将更新堆栈控制器.

如果一个UIView子类开始持有对持有它的控制器的引用(即使它是一个弱引用),你正在移除对其控制器的视图抽象(引用是另一种方式),因此强烈鼓励不良实践那些使用相同代码的人.

什么会阻止另一个开发人员这次在视图所附加的"模型"上添加引用?

现在我不是说这会把你的代码变成意大利面条代码(你仍然可以用它制作一个不错的应用程序),我说这是真的(真的!)不好的做法.

希望这很清楚.