iOS架构一个中型普通App的一些经验总结
这一版比较完善的的App终于提交审核了。有时间写写自己的一些经验的总结了。自己主导的从0到比较成型的app到目前来说也只有两个,但是其中的很多东西都是大同小异。基本上是想到了什么就写什么,感觉写的不到位的地方,欢迎留言给我。
1.首先是controller的解藕方面的东西:
OC的时代,苹果对于controller的解藕做的不是神完善,对于这块的内容,可以看看我去年写的一篇文章,快速直达。那篇文章介绍的还不是很完善,里面的实例代码也不是很完善。比如说没有个baseviewcontroller之类的东西,实际的时候要弄个这个,present的时候没有默认的新建nav。总之参考一下就好了。
2.数据方面,主要使用了AFNetWorking作为基础的网络框架,辅以基于此封装的 YTKNetwork 很多网路需要自定义的东西YTKNetwork做的都比较到位,比较建议大家比较深入的研究一下这个基于AF二次封装的YTK。然后在此基础上加入自己的一些自定义的(其实就是修改源代码啦),使用起来还是很方便的,打印curl去和后端争论,真的很爽呢。但是个人还是比较习惯的为每个接口的网络请求创建一个专门的子类,这样可配置的东西就多了,对于比较大型的程序的灵活性和可扩展性还是非常有帮助的。
3.MVVM和MVC的更深入的使用,见到有人面试的时候对此说的头头是道,真正使用的时候却发现没有体会到其中的精髓。
举例来说,因为个人喜欢把几乎所有的controller的基view弄成scrollview或者其子类的tableview,主要是有bounce效果,尤其是tableview,虽然一开始创建的时候会比较麻烦,写的代码可能不如直接往一个view或者scrollview上面堆控件来的更直接一些,但是等到产品的需求各种变更的时候就知道了。另外,使用tableview还可以把很多的业务逻辑分拆到cell里面,只要把数据抛给相应的cell,怎么展示怎么交互就都抛给cell去做了,有什么结果可以再回调回来。如果controller的数据变了,只需要重新config相应的cell,reload一下那一条cell就解决了,程序执行效率高还不容易出错,出了错也比较好调试。
使用xib布局基本的样式,这样也能大大的减少controller的代码,只有逻辑变更的时候可能是需要在controller里面写一些代码,controller的代码尽量的保持简洁,真的非常棒,逻辑更清晰了,再也不想看特别长的很多不该写在controller却又写在里面的的代码了。
4.合理的使用单例。
单例这个东西是比较好用的,但是因为其威力比较大,影响会比较广泛,所以一定要慎重的使用。用户基本信息,登录否等的基本信息可以存在单例里面,但是可以是单例持有的一个userinfo的对象,保持扩展,说不定那天你的程序就可以多用户登录了呢。
5.用到的第三方的东西,尽量的自己做一下封装。
HUD啊,高德地图啊,等的东西,使用的时候最好封装一下,不但自己使用的时候会方便很多,后期效果的修改可以在不改动第三方库的情况下进行比较高级别的base修改。尤其是使用了cocoapods安装类库的时候,不改库,能更方便的更新版本。
6.bug的反馈机制。
版本上线后可能还会发现很多的bug,有可能崩溃,卡顿,等等各种问题。这个时候专门的bug反馈就显得比较重要了。这推荐几个SDK,方便使用。
BugTags https://www.bugtags.com/
BugHD https://bughd.com/
再加上转门的符号表分析工具,可以直接解析苹果给的日志,https://github.com/answer-huang/dSYMTools
能追踪到很大部分的日志了。
7.热修复。
版本上线后,有的时候会产生很多的小问题,这些小的问题,可能是致命的,但是提交一次版本审核就比较麻烦了。
原理都是运用了iOS的动态库,主要有两个大公司在引导这方面的技术吧
阿里巴巴:https://github.com/alibaba/wax
腾讯主要使用:https://github.com/bang590/JSPatch JSPatch还有专门的语法转换工具https://github.com/bang590/JSPatchConvertor
反正我这边使用的JSPatch技术,还有专门SDK,使用起来还是很方便的。
就先写到这吧,下班了,想起来其它的再更新补充吧
iOS架构一个中型普通App的一些经验总结的更多相关文章
- 成都app开发:架构一个App需要学会哪些技术呢?
成都亿合科技小编为您分享: 随着APP应用的流行,越来越多的人想自己学习怎么开发APP应用,那架构一个APP需要学些什么技术呢?首先要了解App都有哪些类型,不同的类型适用于哪些需求,用户可以根据自己 ...
- iOS 架构模式--解密 MVC,MVP,MVVM以及VIPER架构
本文由CocoaChina译者lynulzy(社区ID)翻译 作者:Bohdan Orlov 原文:iOS Architecture Patterns 在 iOS 中使用 MVC 架构感觉很奇怪? 迁 ...
- 对于iOS架构的认识过程
MVC 经典就是经典,没有之一.iOS中MVC架构,看懂斯坦福大学白胡子老头这张图基本上就可以了. 斯坦福大学MVC架构.png 简单理解,就是Controller对象拥有View和Model对象 ...
- iOS架构设计系列之解耦的尝试之变异的MVVM
最近一段时间,在思考如何合理的架构一个可扩展性良好的界面编程方式.这一部分的成果做成了一个叫ElementKit的库.目前功能在不断的完善中. 关于iOS的架构,看多了MVVM,VIPER,MVC,M ...
- 新手怎么读懂一个中型的Django项目
[前言]中型的项目是比较多的APP,肯会涉及多数据表的操作.如果有人带那就最好了,自己要先了解基本的django框架(MTV ,ORM等)师傅可以给讲解一下框架怎么组织url.py,model.py, ...
- iOS - 架构的认识过程,悬崖勒马。
16年的时候写过一篇代码讲解的,依旧是这三种架构,现在20年将近了,看到好的文章,是否增加新的认识. 16年链接 iOS - 架构模式 - 解密 MVC.MVP.MVVM.VIPER架构 新项目选择架 ...
- 读懂一个中型的Django项目
转自https://www.cnblogs.com/huangfuyuan/p/Django.html [前言]中型的项目是比较多的APP,肯会涉及多数据表的操作.如果有人带那就最好了,自己要先了解基 ...
- iOS 模仿一个小项目,总结一下里边的模块
ManoBoo: 参考链接:http://www.jianshu.com/p/fd4c46c31508 这个小的项目是参考ManoBoo的简书的,链接在上方,自己在仿做的过程中,也离不开Man ...
- 发布iOS应用程序到苹果APP STORE完整流程
参考:http://blog.csdn.net/mad1989/article/details/8167529(xcode APP 打包以及提交apple审核详细流程(新版本更新提交审核)) http ...
随机推荐
- 前端CSS预处理器Sass
前面的话 "CSS预处理器"(css preprocessor)的基本思想是,用一种专门的编程语言,进行网页样式设计,然后再编译成正常的CSS文件.SASS是一种CSS的开发工 ...
- C语言 · Torry的困惑(基本型)
问题描述 Torry从小喜爱数学.一天,老师告诉他,像2.3.5.7--这样的数叫做质数.Torry突然想到一个问题,前10.100.1000.10000--个质数的乘积是多少呢?他把这个问题告诉老师 ...
- [C#] 简单的 Helper 封装 -- RandomHelper
using System; namespace Wen.Helpers { /// <summary> /// 随机数助手 /// </summary> public seal ...
- 移动端访问PC站点时自动跳转至移动站点
方法一: 百度Site APP的uaredirect.js 实现手机访问,自动跳转 <script src="http://siteapp.baidu.com/static/webap ...
- MySQL 系列(二) 你不知道的数据库操作
第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 本章内容: 查看\创建\使用\删除 数据库 用户管理及授权实战 局域网 ...
- Ajax使用WCF实现小票pos机打印源码
通过ajax跨域方式调用WCF服务,实现小票pos机的打印,源码提供web方式,客户端方式测试,服务驻留右侧底部任务栏,可控制服务开启暂停,用户可自定义小票打印模板,配合零售录入. qq 22945 ...
- 图解CSS3制作圆环形进度条的实例教程
圆环形进度条制作的基本思想还是画出基本的弧线图形,然后CSS3中我们可以控制其旋转来串联基本图形,制造出部分消失的效果,下面就来带大家学习图解CSS3制作圆环形进度条的实例教程 首先,当有人说你能不能 ...
- ionic第二坑——ionic 上拉菜单(ActionSheet)安卓样式坑
闲话不说,先上图: 这是IOS上的显示效果,代码如下: HTML部分: <body ng-app="starter" ng-controller="actionsh ...
- SQL-union
集合运算符是对两个集合操作的,两个集合必须具有相同的列数,列具有相同的数据类型(至少能隐式转换的),最终输出的集合的列名由第一个集合的列名来确定.(可以用来连接多个结果)联合(union)与连接(jo ...
- linux下配置matlab运行环境(MCR)
在安装好的matlab下有MCR(MatlabCompilerRuntime)在matlab2011/toolbox/compiler/deploy/glnxa64下找到MCRInstaller.zi ...