iOS学习-- MVC学习

MVC是什么

MVC(Model View Controller)是一种软件设计的框架模式,它采用模型(Model)-视图(View)-控制器(controller)的方法把业务逻辑、数据与界面显示分离。把众多的业务逻辑聚集到一个部件里面,当然这种比较官方的解释是不能让我们足够清晰的理解什么是MVC的。用通俗的话来讲,MVC的理念就是把数据处理、数据展示(界面)和程序/用户的交互三者分离开的一种编程模式。
举个例子,在登陆注册的实现中我们可以只在两个view controller类对中完成所有操作,而MVC则要求我们将每个view controller对象中分为三部分M(model),V(view),C(controller)三部分;
Model:表示应用程序核心(比如数据库记录列表),通常模型对象负责在数据库中存取数据,模型独立于视图和控制器。通常为NSObject类,如两个可变数组;

View:UI显示,通常为UIview类,用于显示用户所见的Ui和数据;

Controller:如其名,管理用户交互和数据处理之类的活动,通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。

在这里插入图片描述
MVC模式的目标是将应用程序的不同方面分离,使代码更易于维护和扩展。通过将数据逻辑、用户界面和用户交互分离为独立的组件,MVC模式提供了一种结构化的方法来开发复杂的应用程序。

MVC的优缺点

优点:
1.MVC模式将应用程序的不同方面分离开来,使得模型、视图和控制器能够独立开发和测试。最直接的表现,改代码跟容易了。。。;
也具备了更好的扩展性;

2.可重用性:由于模型和视图是独立的组件,它们可以在不同的场景中重用。这意味着可以使用相同的模型来支持多个不同的视图,或者可以使用不同的视图来显示相同的模型数据。

3.易于维护:由于MVC模式将应用程序的不同部分分开,因此更容易对其进行维护。如果需要更改数据逻辑或用户界面,可以只修改相应的模型或视图,而不会对其他部分造成影响。

4.可测试性:MVC模式的分层结构使单元测试变得更加容易。开发人员可以独立测试模型、视图和控制器,而不需要依赖其他组件。

缺点:
1。复杂性:MVC模式引入了额外的复杂性,因为开发人员需要管理模型、视图和控制器之间的交互。这可能增加了开发时间和复杂性。

2.学习曲线:对于新手开发人员来说,理解和应用MVC模式可能需要一些时间和学习。它需要理解各个组件的角色和相互之间的关系。

3.过度设计:如果应用程序规模较小或简单,使用MVC模式可能会过于复杂和冗余。在这种情况下,选择更简单的架构模式可能更合适。

登录注册界面MVC模式的使用

该demo的实现大致为两个界面,登录和注册;
在这里插入图片描述
我这里就讲一下登陆界面,注册界面是差不多的;
M:这里是一个NSObject类,为其添加两个可变数组类的对象作为属性,并提供初始化方法;
在这里插入图片描述
在这里插入图片描述
V:提供构成用户所见的Ui界面的对象;
在这里插入图片描述
在这里插入图片描述
C:管理用户交互,以及Model和View的初始化;
在这里插入图片描述

#import "loadcontroller.h"
#import "ControllerResign.h"
@interface loadcontroller ()

@end

@implementation loadcontroller

- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = UIColor.whiteColor ;
    // Do any additional setup after loading the view.
    self.Viewload = [[loadview alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)] ;
    [self.Viewload initview] ;
    [self.view addSubview:self.Viewload] ;
    
    self.Modelload = [[loadmodel alloc] init] ;
    [self.Modelload initmodel] ;
    
    [self.Viewload.btnload addTarget:self action:@selector(pressload) forControlEvents:UIControlEventTouchUpInside] ;
    [self.Viewload.btnresign addTarget:self action:@selector(pressresign) forControlEvents:UIControlEventTouchUpInside] ;
}

- (void)pressload {
    BOOL juice = NO ;
    NSString* str01 = self.Viewload.namefield.text ;
    NSString* str02 = self.Viewload.passfield.text ;
    for (int i = 0; i < self.Modelload.namearray.count; i++ ) {
        if ([str01 isEqualToString:self.Modelload.namearray[i]] && [str02 isEqualToString:self.Modelload.passarray[i]]) {
            juice = YES ;
        }
    }
    if (juice == NO) {
        UIAlertController* alertcontroller = [UIAlertController alertControllerWithTitle:@"警告" message:@"用户名或密码不正确" preferredStyle:UIAlertControllerStyleAlert] ;
        UIAlertAction* action = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
            self.Viewload.namefield.text = @"" ;
            self.Viewload.passfield.text = @"" ;
        }] ;
        [alertcontroller addAction:action] ;
        [self presentViewController:alertcontroller animated:YES completion:nil] ;
        
    } else {
        UIAlertController* alertcontroller = [UIAlertController alertControllerWithTitle:@"警告" message:@"登陆成功" preferredStyle:UIAlertControllerStyleAlert] ;
        UIAlertAction* action = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
            self.Viewload.namefield.text = @"" ;
            self.Viewload.passfield.text = @"" ;
        }] ;
        [alertcontroller addAction:action] ;
        [self presentViewController:alertcontroller animated:YES completion:nil] ;
    }
}

- (void)pressresign {
    ControllerResign* vc = [[ControllerResign alloc] init] ;
    vc.delegate = self ;
    [self.navigationController pushViewController:vc animated:YES] ;
    NSLog(@"1") ;
    vc.namearray = self.Modelload.namearray ;
    vc.passarray = self.Modelload.passarray ;
}

- (void)resigndelegate:(NSMutableArray *)namearray andnext:(NSMutableArray *)passarray {
    self.Modelload.namearray = namearray ;
    self.Modelload.passarray = passarray ;
}

/*
#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.
}
*/

@end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值