作家
登录

iOS如何进行优化项目?

作者: 来源: 2017-07-31 08:31:53 阅读 我要评论

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对象,如下情况就会产生崩溃:

  1. id obj = [NSNull null]; 
  2. NSLog(@"%@", [obj stringValue]); 

然则向nil对象发送消息则不会产生崩溃,这些可以参考NullSafe中的处理办法,重写

- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector和- (void)forwardInvocation:(NSInvocation *)anInvocation这两个办法将没才能处理消息的办法签名转发给nil对象则不会产生崩溃

此外,常见的崩溃比如,NSArray取值袈浣界,NSDictionary传了nil对象,这些问题产生的崩溃可以应用Runtime中的Method Swizzle,将原生的办法hook掉落,如下:

  1. @implementation NSMutableDictionary (NullSafe) 
  2.   
  3. - (void)swizzleMethod:(SEL)origSelector withMethod:(SEL)newSelector 
  4.     Class class = [self class]; 
  5.   
  6.     Method originalMethod = class_getInstanceMethod(class, origSelector); 
  7.     Method swizzledMethod = class_getInstanceMethod(class, newSelector); 
     1/8    1 2 3 4 5 6 下一页 尾页

      推荐阅读

      从交通三元素看高德易行新平台

    “高德易行平台的上线,标记住高德地图在交通出行计谋进级上迈出了重要一步。其实交通在我看来竽暌剐三元素,就是人、车和路,它们构成了交通核心的关键词。将来高德将以易行平台与交>>>详细阅读


    本文标题:iOS如何进行优化项目?

    地址:http://www.17bianji.com/lsqh/36461.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)