【端-iOS】给iOS开发入门者编码的一点建议
规范编码可以提高代码的可读性,降低维护成本。作为一个程序员,要对自己写的代码负责,虽然bug无可避免,但是写代码时最基本的编码规则还是应该遵守的,否则不是坑自己就是坑别人,因为代码肯定是要维护的。
下面我主要讲一下从建项目到开发写代码时应该注意的一些地方和自己的一点建议。
- 项目名称:项目名字的英文或者拼音全拼形式(如果比较长也可以选择缩写),建议每个单词或者拼音的首字母都大写。
- Bundle Identifier:唯一标识符,最好包含公司的名字和项目名字,我一般用的格式为:www.公司名称或缩写.项目名称.www,已经被别人在开发者证书中心注册过的Bundle Identifier就无法再次添加到自己的证书中心,所以带上公司名和项目名可以防止用了已经被占用的Bundle Identifier。
- 目录结构中的文件夹命名:在用xcode开发时,左边的项目目录结构用的比较多,也是一个很关键的地方,所以建议这里的文件夹目录能放的比较有层次,这样在找代码和修改代码的时候方便。文件夹的名字应该与文件夹中所放代码的作用或者所属模块相关联,名字可用英文或者拼音缩写,首字母大写,中文也是可以用的,但是我个人不建议用中文,原因大家都懂。文件夹可以含多层,比如首页模块的功能,第一层可以是Home文件夹,然后在这个里面可以再细分视图、数据、交互等。另外有些人也有习惯给代码中的文件夹加上统一的前缀,这也是可以的,看上去也很舒服。
- 类名:建议带上固定的前缀和相应的后缀,在二者之间填上类所实现的功能。先来说固定的前缀,比如说AFNetWorking,这个第三方库,类名都是以AF开头的,我们自己写的类名也可以,这个前缀可以用项目名字的首字母缩写、公司名缩写或者任何你喜欢的字母组成,加这个前缀有两个好处,一个项目目录整齐,还有一个就是项目中的模块拿到别的项目中使用可以很大程度上降低类名相同而造成不能直接使用的概率。相应的后缀指的是此类所属的类型,比如如果此类为ViewController的子类,那么类名可以以ViewController或者简写成VC来结尾,这样这个类是个ViewController还是个view一目了然。中间为此类要实现的功能相关是为了看类名就能知道这个类是干什么用的,比如MMHomeViewController这个类名,MM为项目名称缩写,Home代表首页,ViewController表示该类为一个视图控制器,一看这个类名就很容易知道这个类中写的是首页的实现的代码。有一些继承自NSObject类的单例可以以Manager为后缀。类名首字母大写。
- 成员变量:最最基本的应该见名知意,最好有变量对应的类型的后缀,首字母小写。比如loginButton,这样就很好理解,一看就知道这代表一个登录按钮。成员变量是整个类都能用的,如果起名很随意,代码理解起来可能比较困难。首字母小写,遵守驼峰规则。
- 局部变量:同上需要见名知意,虽然存在的范围小,但是也很影响阅读性,千万不要取什么arr1、arr2之类的,很难知道里面放的是什么。首字母小写,遵守驼峰规则。
- 代理/协议名:该协议对应的类的类名+Delegate/Protocol,首字母大写。
- 方法名:每个参数前的英文块首字母小写,遵守驼峰规则。方法名以该方法所实现的功能为主,所需参数的参数名最好能带上该参数的类型,这样调用起来方便,看方法名可知在哪儿用,看参数名可知所需什么参数。
- 注释:在这里特意加上注释,其实并不是要谈注释的规范,而是想说,命名不会规范的程序员在写代码的时候记得多写点注释,绝对没坏处!!!
最后说一下自己的亲身体验,接手过一套代码,类名随便取,很多继承自ViewController的视图控制器都以view结尾,变量名更不用说,看代码的时候还得靠猜这个变量里面放的是什么。记得印象比较深的是,在一个单例类中有一个type变量,看调用的地方挺多,有设置为1的,有设置为2的,也有拿来做判断条件的,完全不知道这个值的意义是什么。跟写代码的人沟通,他自己也忘记掉了,也不知道用的地方为什么那么用。这只是印象比较深的一个,他唯一的说辞是他自己开发技术太菜。但是我觉得,编码是否规范与技术水平高低关系不是很大,代码风格更多的是反映一个程序员的编程习惯的态度。实在不会规范,那就加注释,简单的注释一下变量是用来干嘛的等等。
编程技术水平有高低,但是认真的态度不该有差别,一个程序员可以写不出很炫很酷很牛的代码,但是千万不要随意的写出难以阅读和维护的代码!
这些规范也是我自己的一些小总结,希望能给刚入门的一些人一点提醒和帮助。
【端-iOS】给iOS开发入门者编码的一点建议的更多相关文章
- iOS混合应用开发入门
原文出处: cocoacontrols 译文出处:魏志峰(@JeremyWei) 欢迎分享原创到伯乐头条 http://blog.jobbole.com/46554/ 介绍 上周(译者:原文成 ...
- iOS - 初学iPad开发入门
iPad是一款苹果公司于2010年发布的平板电脑定位介于苹果的智能手机iPhone和笔记本电脑MacBook产品之间跟iPhone一样,搭载的是iOS操作系统 iPhone和iPad开发的区别 屏幕的 ...
- iOS组件化开发入门 —— 提交自己的私有库
前言:本人也是初次接触组件化开发,感觉现有的资料太繁杂,就简单整理了一下,在此跟大家分享一些入手的经验,主要就是描述cocoapods的私有库封装和提交.组件化开发是个大的议题,涉及到架构思路.设计模 ...
- 一看就懂的Android APP开发入门教程
一看就懂的Android APP开发入门教程 作者: 字体:[增加 减小] 类型:转载 这篇文章主要介绍了Android APP开发入门教程,从SDK下载.开发环境搭建.代码编写.APP打包等步骤 ...
- IOS开发入门实例
关于如何创建第一个 iOS 应用 本篇“第一个 iOS 应用”教程将向你介绍 iOS 应用开发中的“三个T”: Tools(工具)如何利用 Xcode 创建和管理工程. Technologies(技术 ...
- iOS开发入门教程
iOS开发入门教程 http://my.oschina.net/mailzwj/blog/133273 摘要 iOS开发入门教程,从创建项目到运行项目,包括OC基础,调试,模拟器设置等相关知识. iO ...
- Apple官方IOS开发入门教程[v0.2]
今天,又跑去找IOS开发入门教程了,结果发现没什么好的PDF. 后来发现,原来苹果官方有开发入门教程,而且写的很好.所以整理出来了,给大家分享一下. 我就不在这里贴pdf的内容了,下面有苹果官方教程的 ...
- iOS开发入门
https://github.com/qinjx/30min_guides/blob/master/ios.md 任何C源程序,不经修改,即可通过Objective-C编译器成功编译 Objectiv ...
- IOS开发入门教程-总结篇-写给狂热的编程爱好者们
程序发轻狂,代码阑珊,苹果开发安卓狂!--写给狂热的编程爱好者们 写在前面的话 学习iOS应用程序开发已有一段时间,最近稍微闲下来了,正好也想记录一下前阶段的整个学习过程.索性就从最基础的开始,一步一 ...
随机推荐
- Docker(六):Docker网络配置进阶
1.Docker集群网络配置之Weave Weave是Github上一个比较热门的Docker容器网络方案,具有非常良好的易用性且功能强大.仓库地址:https://github.com/weavew ...
- kibana提示“Your Kibana index is out of date, reset it or use the X-Pack upgrade assistant.”
=============================================== 2017/12/15_第1次修改 ccb_warlock = ...
- Redis在APP中的应用
前言 redis 是内存型数据库,读取data速度远快于mysql和sqlserver,如果将APP中列表信息或者一些常被访问的信息转存至内存上,然后APP通过redis读取内存上的数据,那么APP的 ...
- 关于python中的dir函数
dir函数用于查看python对象的属性,如果所查看的python对象已经定义了__dir__方法,则使用dir会返回定义的__dir__方法的返回值.如果没有定义__dir__方法,则会从__dic ...
- Linux设置PHP环境变量
区分 环境变量从时间上可分为临时性和永久性,这里只说明永久性的设置 操作 PHP 安装目录 找到PHP的安装目录:我这里是/phpstudy/server/php 其bin目录为:/phpstudy/ ...
- Linux 监测命令
1. ps -ef -e显示所有进程:-f 显示完整格式的输出: 2. ps -l -l 显示一个长列表 3. ps -efH -H 用层级格式显示进程(树状) [ps 命令:显示某个特定 ...
- 【LCT】BZOJ2049 [SDOI2008]Cave 洞穴勘测
2049: [Sdoi2008]Cave 洞穴勘测 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 10059 Solved: 4863[Submit ...
- COM学习(四)——COM中的数据类型
上一次说到,COM为了跨语言,有一套完整的规则,只要COM组件按照规则编写,而不同的语言也按照对应的规则调用,那么就可以实现不同语言间相互调用.但是根据那套规则,只能识别接口,并调用没有参数和返回类型 ...
- Spring框架入门之开发环境搭建(MyEclipse2017平台)
基于MyEclipse2017平台搭建Spring开发环境,这里MyEclipse已将Spring集成好了,我们只需要做一简单配置即可 一.环境配置 OS:Windows7 64位 IDE工具:MyE ...
- MYSQL:alter语句中change和modify的区别
您可以使用CHANGE old_col_namecolumn_definition子句对列进行重命名.重命名时,需给定旧的和新的列名称和列当前的类型.例如:要把一个INTEGER列的名称从a变更到b, ...