iOS开发架构

Posted MinggeQingchun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS开发架构相关的知识,希望对你有一定的参考价值。

其实对于“架构”这个词,我觉得是一个很庞大的话题。我刚出道还是一个小菜鸟的时候,一直认为这个话题是对于拥有很多年开发经验的程序员来说的(这里并没一味去认为老程序员就是神的说法,也有部分水货哦,大部分都是大牛吧),毕竟在软件开发这一行业,经验足够深时才有更多的思考和设计。然事情过去一两年之后,自己个人技术也慢慢有所提升,从自己写博客记录个人错误积累经验伊始,我就发现自己停不下来了,真的是停不下来了,那是真真的停不下来了,我不停的给我同学或者技术群推荐我的博客,收到一些人的嘲笑,但是我从未停止过。因为重现的错误我即使忘了也能通过个人博客很快定位并进行修复,我想这就是积累和成长对我最大的帮助吧!

我不知道别人如何理解“架构”的,在跳槽两次之后,看到两家老大和同事的一些代码,自己一直想总结一套属于自己的风格,之前也有总结但只是试用一下还不够全面,今日下午闲着喝了一杯毛尖新茶(老家自产的,博主父亲邮寄而来),新茶的清香在一小段舒服的午觉之后激发了博主的灵感,进行了一下总结,至少先在博客中慢慢的记录一下,以后再不断优化补充。在我眼里:首先就是一个项目整体的框架,然后导入使用的库或者自己封装的库和公共方法,项目文件路径清晰明了,注释和代码都易懂,方便自己和别人协同开发,其次要尽量保持一致的风格,形成公司的开发规范;说白了,就是对该项目有一个模板,别人就是在你这个模板之下填充代码,本地文件存放路径。当然这也只是自己个人对ios开发架构的理解,有不当之处还望广大的博友给予更好的建议!下面就我自己反思总结对整体项目开发架构进行设计:

一、MVC模式

MVVM、MVP模式博主暂时用的少,大家可以给博主一些好文章钻研,感激不尽!

1、创建基类BaseViewController和BaseNavigationController(可根据需要),设定导航栏颜色(项目主题色),以及返回键样式,还可判断网络,如:

- (void)viewDidLoad {
    [super viewDidLoad];
    //设置左边 返回按钮
    [self setLeftButton];
}

- (void)setLeftButton
{
    UIView *navibarView = [[UIView alloc]initWithFrame:CGRectMake(0, 0,Wi,64)];
    navibarView.backgroundColor = COLOR_C_NavigationRED;
    [self.view addSubview:navibarView];
    
    //导航栏的返回按钮只保留那个箭头,去掉后边的文字,最简单且没有副作用的方法就是
    [[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -60) forBarMetrics:UIBarMetricsDefault];
}

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    
    self.navigationController.navigationBar.hidden = NO;
    [self.navigationController.navigationBar setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor whiteColor],NSForegroundColorAttributeName,nil]];
    [self.navigationController.navigationBar setBackgroundImage:UIIMAGE(@"")
                                                 forBarPosition:UIBarPositionAny
                                                     barMetrics:UIBarMetricsDefault];
    [self.navigationController.navigationBar setShadowImage:[UIImage new]];
    self.navigationController.navigationBar.tintColor = [UIColor whiteColor];
    [self.navigationController.navigationBar setBarTintColor:COLOR_C_NavigationRED];
    self.view.backgroundColor = COLOR_C_BackColor;
    //返回按钮
    UIBarButtonItem *item = [[UIBarButtonItem alloc]initWithImage:UIIMAGE(@"") style:UIBarButtonItemStylePlain target:self action:@selector(goBack)];
    [[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];
    self.navigationItem.backBarButtonItem = item;
    
    //检测网络
    [self getNetWorkstate];
}

- (void)goBack
{
    [self.navigationController popViewControllerAnimated:YES];
}

#pragma mark - 网络检测
- (void)getNetWorkstate{
    AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
    [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
        switch (status) {
            case AFNetworkReachabilityStatusUnknown:
                NSLog(@"未识别的网络");
                break;
            case AFNetworkReachabilityStatusNotReachable:{
                NSLog(@"不可达的网络(未连接)");
                SHOWALERT(@"未连接网络!");
                break;}
            case AFNetworkReachabilityStatusReachableViaWWAN:
                NSLog(@"2G,3G,4G...的网络");
                break;
            case AFNetworkReachabilityStatusReachableViaWiFi:
                NSLog(@"wifi的网络");
                break;
            default:
                break;
        }
    }];
    [manager startMonitoring];
}

2、UITabBarController根据需求是否需要自定义

3、View控件类别进行方法的添加(怎么处理看你需求了),方便处理使用


4、Model创建一个即可,无需一个数据对象创建一个model

setValue:(id)value forUndefinedKey:(NSString *)key方法进行修改,同时此方法可以过滤掉不存在的键值对而防止崩溃,或者修改你手动的映射key值不同的值

在model.m文件中