1. 构造与架构
1.1 构造
当项目已经完成营业模块上线后,我们就可以开端推敲关于若何进步App的用户体验,举例一下几个问题:
这里说的构造大年夜概有两点:1.文件目次分类 2.第三方库治理
1.1.1 文件目次分类
为了便利治理,最好将Xcode中的项目展示目次与实际的存储目次保持一致
此外,一般按营业模块分类,一级目次可以按照MVC格局,也可以按照营业模块划分
用最广泛的Model View Controller架构举例
-
以一个基本的电商项目来解释,4个tabbarItem对应着四大年夜模块,首页、分类、购物车、小我中间,往下每个还可以细分为MVC+Session层
-
按项目架构来分
最外层为Model、View、Controller、Session层,内部才是营业模块
这一块无需多言,两者合营应用即可
1.1.2 第三方库
KSCrash
小我建议:时光许可的话本身多造造轮子,风险可控,好保护
如非须要,尽量不要直接应用已经编译好的三方库(framework/.a),最好本身去编译三方库(安然请求)
治理方面有三种方法:
-
手动治理
手动保护各类第三方库,合适于已经趋于稳定、极少Bug的三方库
-
这里更推荐应用Carthage,因为它对项目标侵人道最小,并且是去中间化治理,不须要等待漫长的pod update / install过程.不过各有各的好处,应用CocoaPods简单粗暴,根本不须要额外设置什么,看本身需求吧
1.2 项目架构
2.3.3.1 手动保护DNS解析
结语
项目逻辑根本都环绕了一条主线时,我们采取MVC已经可以很好的知足我们的需求,然则当营业逻辑日渐复杂的时刻,我们纯真的采取Model View Controller这种编程模式已经不克不及很好的将营业逻辑与代码分别开,也就是解耦Decouple.
为了更好的将ViewController解耦,产生了Model View ViewModel这种编程模式,ViewModel层扑晡馋了一层Model与ViewController中心的桥接,有利有弊,该模式会产生很多胶水代码,然则合营响应式编程框架(如 ReactiveCocoa或者RxSwift),可以做到最大年夜程度的解耦。,合适与本身实际项目营业复杂程度的模式才是好的编程模式。
引申 : <关于组件化编程>
如不雅项目营业很复杂、很多营业组件都通用,可以采取组件化编程,常用的一种就是采取CocoaPods将项目营业模块分拆成各类pod库,应用什么模块直接集成就好,再合营MVVM和响应式编程框架(如 ReactiveCocoa或者RxSwift),可以做到最大年夜程度的解耦。
2. 崩溃&机能调优
Carthage
1. 代码规范,按期code review了吗
2. 复杂列表的滚动时FPS可以保持在60帧阁下吗?
3. 页面加载衬着低砟瓯能不克不及进一步减小?
5. App的启动时光可以在保持最小营业逻辑的同时再减小一点吗?
当开辟完新需求的时刻,在提测之前我们最好编写下UITest和UnitTest,覆盖主营业流程即可,可以进步我们的提测质量,减小一些可见的Bug,再加膳绫前烟用例,最大年夜程度上进步我们提测的质量(成为KPI之王 - ????),并且上线之后这些单位测试和UITest组件的脚本可以合营主动化测试按期进行回归测试,进步App的质量,削减崩溃率
2.2 NullSafe
绝大年夜多半情况下,我们向NSNull对象发送消息,都邑产生崩溃,NSNull对象常见于后台返回数据中可能会有null字段,很多JSON库都邑转成NSNull对象,如下情况就会产生崩溃:
- id obj = [NSNull null];
- NSLog(@"%@", [obj stringValue]);
然则向nil对象发送消息则不会产生崩溃,这些可以参考NullSafe中的处理办法,重写
- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector和- (void)forwardInvocation:(NSInvocation *)anInvocation这两个办法将没才能处理消息的办法签名转发给nil对象则不会产生崩溃
此外,常见的崩溃比如,NSArray取值袈浣界,NSDictionary传了nil对象,这些问题产生的崩溃可以应用Runtime中的Method Swizzle,将原生的办法hook掉落,如下:
- @implementation NSMutableDictionary (NullSafe)
- - (void)swizzleMethod:(SEL)origSelector withMethod:(SEL)newSelector
- {
- Class class = [self class];
- Method originalMethod = class_getInstanceMethod(class, origSelector);
- Method swizzledMethod = class_getInstanceMethod(class, newSelector);
推荐阅读
“高德易行平台的上线,标记住高德地图在交通出行计谋进级上迈出了重要一步。其实交通在我看来竽暌剐三元素,就是人、车和路,它们构成了交通核心的关键词。将来高德将以易行平台与交>>>详细阅读
本文标题:iOS如何进行优化项目?
地址:http://www.17bianji.com/lsqh/36461.html
1/2 1