很久没有在做过ios,也没有在设计过MVC的东西,有天在看一个应用的源代码时越来越觉得设计的乱,没有模式可谈,后来发现是自己的概念模糊了。因此,总结下记录在这里:
MVC的概念地球人都知道~
那么C和V的关系是什么呢,C可以控制V中的展示,而V不需要拥有一个C的对象,她只需要知道自己如果发生变化的话,给一个Target发送一个消息就好了,这个Target可以在一个C上,也可以是不同的C上的Target(这里要说明,C上面有个暴露给外面的outlet提供给V来hit的。)说白了C和V之间有个单向的关系是一直保持的,就是C控制着V。这里有个问题:C需要用户V上所有控件么?答案是不,事实上当控件在V上生成时,V已经strongly 拥有了某个控件,因此在C上创建一个V上控件的property时,只需要weak型即可。比如
@property (nonmatic, weak) UILabel *mylbl;
再说说C和M的关系,M会是一个类或者多个类,C应该绝对拥有这个Model的生命周期,因此对应的定义@property (nonmatic, strong) myModelClass *myModel;来拥有这个model的生命周期,当使用完时,需要release 调这个model 的对象。Model不会知道她到底被那个C在使用,有可能是多个C在使用同一个Model,那么Model是如何跟C来通信的呢?其实Model如果数据有了变化,会以广播的形式把信息广播出去,所有作为这个Model观察着的C都会收到相应的广播,然后相应的修改V。
然后是M和V,这两个就像是个白无常和黑无常一样,他俩是永远永远决不能进行通讯的~~