IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> iOS——MVC -> 正文阅读

[PHP知识库]iOS——MVC

iOS——MVC

定义

模型-视图-控制器(MVC)设计模式为应用程序中的对象分配三种角色之一:模型、视图或控制器。该模式不仅定义了对象在应用程序中扮演的角色,还定义了对象彼此通信的方式。这三种类型的对象都通过抽象的边界与其他类型的对象分离,并跨越这些边界与其他类型的对象进行通信。应用程序中特定MVC类型的对象集合有时被称为层—例如,模型层。MVC是Cocoa应用程序良好设计的核心。

Model:当视图层中用于创建或修改数据的用户操作通过控制器对象进行通信,从而创建或更新模型对象。当模型对象发生更改时(例如,通过网络连接接收新数据),它会通知控制器对象,该对象会更新相应的视图对象。

View:查看对象通过应用程序的控制器对象了解模型数据的更改,并将用户启动的更改(例如,在文本字段中输入的文本 - 通过控制器对象 - 传递到应用程序的模型对象。

Controller:控制器对象解释在视图对象中进行的用户操作,并将新的或更改的数据传递给模型层。当模型对象发生更改时,控制器对象会将新模型数据传递给视图对象,以便它们可以显示它。

这是三者之间的关系图:

在这里插入图片描述

在这里插入图片描述

Model:负责业务逻辑、来自UI数据处理、本地数据、网络接收数据。
View:负责实现屏幕展示的UI、响应用户事件。
Controller:负责View与Model间的消息的转发传递。

MVC的用法

首先我们需要创建三个文件夹分别是:M、V、C。然后新建一个名为VView的类,继承自UIView,新建一个名为MModel的类,继承自NSObject。

在这里插入图片描述

实例

因为我们可以看出来M是用来处理数据的,我们就可以简单的声明两个方法。


#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface MModel : NSObject
- (void)save;
- (void)load;
@end

NS_ASSUME_NONNULL_END
#import "MModel.h"

@implementation MModel

- (void)save {
    NSLog(@"成功保存!");
    [[NSNotificationCenter defaultCenter] postNotificationName:@"ok" object:self];
    
}

- (void)load {
    NSLog(@"加载中...");
}
@end

在V中我们就需要创建显示在画面上的内容,比如按钮、文本框等等。

#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

@interface VView : UIView

@property (nonatomic , strong)UIButton *saveButton;
@property (nonatomic , strong)UIButton *loadButton;
- (void)viewInit;//添加初始化控件的方法
@end

NS_ASSUME_NONNULL_END

- (void)viewInit {
    _saveButton = [UIButton buttonWithType:UIButtonTypeCustom];
    _saveButton.frame = CGRectMake(100, 100, 100, 100);
    [_saveButton setTitle:@"保存" forState:UIControlStateNormal];
    [_saveButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    [self addSubview:_saveButton];
    
    
    _loadButton = [UIButton buttonWithType:UIButtonTypeCustom];
    
    [_loadButton setFrame:CGRectMake(100, 250, 100, 100)];
    
    [_loadButton setTitle:@"加载" forState:UIControlStateNormal];
    
    [_loadButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    
    [self addSubview:_loadButton];

}

当M和V已经创建好了,C相当于一个控制者,需要去分配数据首先我们需要实例化一个MModel和一个VView对象。


#import <UIKit/UIKit.h>
#import "VView.h"

#import "MModel.h"
@interface ViewController : UIViewController

@property (nonatomic, strong) VView *aView;  
 
@property (nonatomic, strong) MModel *mModel;  

@end

然后就可以对MModel以及VView的实例化对象进行分配数据了

#import "ViewController.h"

#define ScreenWidth [[UIScreen mainScreen]bounds].size.width
 
#define ScreenHeight [[UIScreen mainScreen]bounds].size.height

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(saveOK:)
                                                     name:@"ok" object:nil];
    
    _aView = [[VView alloc]initWithFrame:CGRectMake(0, 0, ScreenWidth, ScreenHeight)];
        [_aView viewInit];
        
        [_aView.saveButton addTarget:self action:@selector(saveBtnPressed:) forControlEvents:UIControlEventTouchUpInside];
        
        [_aView.loadButton addTarget:self action:@selector(loadBtnPressed:) forControlEvents:UIControlEventTouchUpInside];
        
        [self.view addSubview:_aView];
        
        _mModel = [[MModel alloc]init];

   

}


- (void)saveBtnPressed : (UIButton*)sender{
    
    [_mModel save];  
}
 
- (void)loadBtnPressed : (UIButton*)sender{
    
    [_mModel load];
}
 
 
- (void)saveOK : (NSNotification*) notification{
    
    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"恭喜"
                                                                             message:@"保存成功"
                                                                      preferredStyle:UIAlertControllerStyleAlert];
    
    UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {
        
        NSLog(@"点击了取消按钮");
        
    }];
    
    UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
        
        NSLog(@"点击了确定按钮");
        
    }];
    
    [alertController addAction:cancelAction];
    [alertController addAction:okAction];
    
    [self presentViewController:alertController animated:YES completion:nil];
    
    
}
@end

结语

MVC的优点 :
1、可以为一个模型在运行时同时建立和使用多个视图。变化-传播机制可以确保所有相关的视图及时得到模型数据变化,从而使所有关联的视图和控制器做到行为同步。
2、视图与控制器的可接插性,允许更换视图和控制器对象,而且可以根据需求动态的打开或关闭、甚至在运行期间进行对象替换。
3、模型的可移植性。因为模型是独立于视图的,所以可以把一个模型独立地移植到新的平台工作。需要做的只是在新平台上对视图和控制器进行新的修改。
4、潜在的框架结构。可以基于此模型建立应用程序框架,不仅仅是用在设计界面的设计中。
MVC的不足之处 :
1、增加了系统结构和实现的复杂性。对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。
2、视图与控制器间的过于紧密的连接。视图与控制器是相互分离,但确实联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。
3、视图对模型数据的低效率访问。依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。
4、目前,一般高级的界面工具或构造器不支持模式。改造这些工具以适应MVC需要和建立分离的部件的代价是很高的,从而造成MVC使用的困难。

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-09-10 10:38:00  更:2021-09-10 10:39:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 1:31:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码