如何编写高质量iOS代码

一直以来,身边总会有这样的声音——“如何提高自己的代码质量”,我想这个话题可能大家会比较感兴趣,所以在这里分享一下我在iOS开发中对如何提高代码质量的一些心得体会,其他的语言可以以此做一个参照。

1. 基础知识及技巧

想写出高质量代码,并不是一蹴而就的,它需要有一定的基础以及大量的代码知识积累,这里我重点强调与代码质量密切相关的几点:

首先得掌握好开发语言,iOS开发有二种语言——Objective-C和Swift,不管你选择哪种都可以,不过现在Objective-C还是主流,但我相信未来肯定是Swift的天下,关于Objective-C可以看看《Effective Objective-C 2.0:编写高质量iOS与OS X代码的52个有效方法》,这本书讲解了非常多使用Objective-C的技巧。

其次你就需要去了解iOS开发平台特性以及工作原理,了解清楚这些之后,充分利用他的一些特性写出更加地道的代码。

2. 数据结构和算法

计算机科学本来就是由数学发展而来的,数据结构与算法的重要性不言而喻,当然,不是说你不学习算法就不能做开发了,而是说学好数据结构和算法,当你遇到问题时,你可以以更加优雅高效地解决问题。

3. 设计模式

设计模式是一个老生常谈的话题,市面上充斥着各种的设计模式,我们无需对所有的设计模式都需要了解,只需要了解一些常用的设计原则即可,这里给你推荐一本书——《Objective-C编程之道:iOS设计模式解析》,学完之后应该能解决你的绝大部分问题了。

4. 代码标准

一个团队中人来自不同的地方是非常正常的,每个团队中代码风格有时往往又会不一样,这个时候代码标准在团队合作中尤为重要,谁也不希望一个项目中代码风格各异,相互之间都不愿看别人的代码。标准怎么定是一个老生常谈的话题,我个人职业生涯中经历过很多次的代码标准讨论会议,大家有时会坚持自己的习惯不肯退让。代码规范问题我推荐raywenderlich.com团队的objective-c-style-guide (中文翻译),

5. 拆解功能,再写代码

拿到需求除非你很清楚你要怎么做,否则绝对不能直接下手写代码,而是我们需要先思考如何对功能进行拆解以及如何去解决问题,思考目前的方案是否有效?有没有更优的方案?如果你把问题拆解好了,实现其实是非常简单的事。

6. 代码审查

在项目起始阶段进行代码审查会帮助我们更好地使用已经建立起来的代码体系,因为如果我们没有使用过某些现有代码,那么可以从当前的开发者中获得反馈信息。在项目进行过程中,我们会时不时地向团队增加新的开发人员,代码审查可以极大地降低这些新加入人员的熟悉时间。特别地,我们可以让新加入的开发人员很有信心地开发新特性,因为我们可以在合并前审查代码并且对于他们所编写的任何代码提供有价值的反馈信息。

对于分布式团队来说,代码审查更加具有实际意义。团队协同在构建协作环境上会带来很大的帮助作用,我们可以即时提出想法,然后讨论,再进行开发。虽然由于不在同一地点我们会失去一些东西,不过我们却可以在代码审查过程中通过深入的讨论来获得好处。

7. 单元测试

自从Xcode 5以来,Xcode就会默认带上XCTest单元测试库,但单元测试一直没有引起大家的注意,大家可能考虑到写单元测试太破费时间了,但单元测试的一个非常显著的优点是,当你需要修改大量代码时,尽管放心修改,只需要保证单元测试用例通过即可,无需瞻前顾后。

8. 充分自测

自测对于程序员来说是一个头痛的问题,有些程序员总想着让测试帮找问题,连自己的运行结果都不看就把App丢给测试,这是非常不负责任的。作为一个程序员在写完代码后至少需要跑完一遍全部流程以及一些简单的异常情况再交给测试,不然,随便用几下就Crash的东西,会给测试人员这人不靠谱以及技术真low的印象,再说,你准备在别人面前展示自己研究的工作成果时,突然之间Crash掉了,你真的好意思吗?充分自测也是基本的职业素养体现~所以充分自测非常重要!充分自测非常重要!充分自测非常重要!重要的事说三遍~

9. 善用开源

在我刚学iOS开发时,那时的iOS开源代码还是比较少的,我当时都是去官网去看一些代码,ASI还是非常火的网络框架,现在完全就不一样了,各种各样的轮子都有了。当然,在这些轮子的背景下并非所有的开源质量就很高,但一般情况下中口碑好的、使用人多的、关注度高的开源项目,质量是有一定的保证的,这其中的道理很简单。即便存在一些问题,也可以通过提交反馈,不断改进。而充分利用开源项目,能帮助你节省很多时间,把精力专注在最需要你关心的问题上。

能被关注的开源项目,都是领域内的高手所写,向这些牛人学习编程技巧,能让你知道如何能写出高效的代码,学习别人解决问题的方式,培养自己对代码更灵敏的嗅觉。



如何编写高质量iOS代码_第1张图片


你可能感兴趣的:(iOS开发)