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文件中