博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IOS中MVC模型详解(一)
阅读量:6341 次
发布时间:2019-06-22

本文共 1671 字,大约阅读时间需要 5 分钟。

View:继承至UIView,负责展示内容(视图类比如UILabel)、以及接受用户输入Event(控件类比如UIButton)。

1.UIView中的控件类只是接受到了Event,但是它不知道如何响应该Event。Controller知道如何响应。IOS中采取[目标-动作]机制完成响应函数调用。当UIButton接受到用户按下的Event,它便向Controller(Target)发送消息,Controller收到消息后,会执行action。这过程通常在storyboard中手动连线完成。也可以采用编写code(这取决于UI生成的方法,是code创建还是通过storyboard)。在-(void)viewDidLoad中:

 

 

 

 

 

 

 

2. 视图类被用户操作时,需要考虑三个问题will(将要被)、should(可以被) 、did(正在被),要回答这三个问题。视图类委托权利给控制器来处理。

这种两个对象之间的通信方式称为“委托设计模式”。IOS中使用协议如UITextFieldDelgate(相当于其他语言接口)。

protocol:两个对象之间的盲通信。(这里的盲,体现在id是可以指向任意NSObject对象,两个需要通信的对象,都不必了解各自的细节)。

拿代码来说明,典型的视图类包含一个delegate属性:

@interface MyView:UIView

@property(nonatomic,weak)id<myProtocol>  delegate;

@end

在控制器中创建这个视图的时候,会进行如下操作:

-(void)viewDidLoad

{

    _nameT = [[UITextField alloc]initWithFrame:CGRectMake(20, 100, 100, 30)];

    _nameT.delegate = self;  //将控制器 设置为 视图类的 委托

    [self.view addSubview:_nameT]; //view拥有对象UITextField,strong

}

这个过程如图所示:

PS:这个过程也解释了

@property (weak, nonatomic) IBOutlet UITextField *textField;

为什么’插座变量’要使用weak,因为控制器视图类相互持有对方的引用。为了避免循环引用带来的memory leak。

 另一种委托模式的应用,叫DataSource。视图不拥有它要显示的数据(比如UITableView),视图需要向控制器请求需要显示的数据。UITableVIewDataSource协议

  1. -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
  2. -(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
  3. -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

Controller: View与Model之间不能直接通信(这样的设计满足程序的数据与显示隔离),需要Controller来在中间协调。各种相关的ViewController(不同的控制器实现了不同种类的协议)主要负责Model 与 View之间的同步。

控制器同时持有,View的引用(IBOutlet)和Model的引用。

Model:利用IOS提供的基础框架,及Objective-C面向对象的技术,对app的业务逻辑建模。如此Model其实就是代表了这个app是什么。

转载于:https://www.cnblogs.com/rhinoxy/p/4988902.html

你可能感兴趣的文章
面试必问之JVM原理
查看>>
mysql主主同步+Keepalived
查看>>
研究音频编解码要看什么书
查看>>
tomcat远程调试配置
查看>>
QuartZ Cron表达式
查看>>
性能测试工具VTune的功能和用法介绍
查看>>
音频视频组件Audio DJ Studio for .NET更新至v10.0.0.0丨附下载
查看>>
RMAN Complete Recovery
查看>>
[ CodeForces 1064 B ] Equations of Mathematical Magic
查看>>
NYOJ-15:括号匹配(二)
查看>>
首次记录在案的
查看>>
成长路上如何快速升级?你需要强大的自我驱动力
查看>>
C#进阶系列——WebApi 跨域问题解决方案:CORS
查看>>
你真的会玩SQL吗?让人晕头转向的三值逻辑
查看>>
Unity 脚本的未来发展
查看>>
hdu 2055 An easy problem (java)
查看>>
JQuery:JQuery捕获HTML
查看>>
js自动闭合html标签,自动补全html标记
查看>>
cpu进程调度---RT Throttling【转】
查看>>
在MapGuide 的Fusion Viewer的选择面板中显示超链接
查看>>