1 目的

统一规范XCode编辑环境下Objective-C、swift的编码风格和标准

2 适用范围

适用于所有用Objective-C,swift语言开发的项目。

3 编码规范

3.1 文件

  1. 项目文件必须使用一个有意义的名字且前缀以PRJ_。例如:XCcode中下拉刷新的项目文件被命名为’PRJ_PullDownRefresh.xcodeproj’。
  2. 对于文件的目录要按如下结构创建:
    • 建立Libraries文件夹,所有第三方库放入其中.(CocoaPods代替)
    • 建立Constants.h头文件,所有的常量定义于其中。Constants.h文件放入Main文件组里面
    • 项目中所有Group或者文件名称(图片名字等),不要使用汉字命名,尽量使用英文命名,国内特有名词可以使用拼音。

    • 项目中所有Group都需要在项目目录中存在一个真实的目录,Group 中的文件与真实目录中文件一一对应。
  3. 为了不影响阅读,一个类的代码行数尽量不要超过300行;一个方法尽量不要超过30行。有超过的在重构的时候想办法分解。

3.2 注释

  1. 注释可以采用’ /* */ ’和’ // ’两种注释符号,涉及到多行注释时,尽量使用’ /* */ ’。
  2. 对于一行代码的注释可放在前一行及本行上,不允许放在下一行,更不允许在一行语句的中间加入注释。
  3. 单元文件的文件头注释说明应按如下格式:
//
// ViewController.m
// 规范Demo
//
// Created by KongYu on 16/5/18.
// Copyright © 2016年 SLH. All rights reserved.
// // 功能描述:
// 修改记录:
// 张三 2016-05-19 改变tableView的headerView的布局
  1. 不必每行都加注释,在3~10行左右的段落做注释要好于每行都做注释,显而易见的代码不加注释。例如:
if (!returnValue) {//调用登录过程失败无用的注释
NSLog(@”登录失败”);
}
  1. 方法的注释建议使用Xcode插件VVDocument使用,变量注释使用/** */ (使用的时候可以看到注释), 如:
/**
* <#Description#>
*
* @param application <#application description#>
* @param launchOptions <#launchOptions description#>
*
* @return <#return value description#>
*/ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
return YES;
}

3.3 编码排版格式

  1. 代码的缩进应使用空格(SPACE),不能使用制表符(TAB),并且缩进以2个字符为单位。4个空格TAB
  2. 中括弧的每一个括弧在源程序中要单独占一行。例如
for (int i = 0; i < 10; i++) {
}
  1. 空格的使用
    • 关键字与其后的表达式之间要有空格,如: if (expr)或for (expo)
    • 单目操作符不应与它们的操作数分开(如’!’和’^’等)。
    • 除’ , ’外,其它双目操作符应与它们的操作数用空格隔开。例如
i=i+1;              //错误的写法,操作符两端没有空格
i = i + 1; //正确的写法,
if(a>b) //错误的写法,逻辑判断符号两端没有空格
if(a > b) //正确的写法
  • .h中协议<>前面有一个空格。
  • .h中成员声明时,类型与变量之间有至少1个空格。*号靠近变量,不靠近类型。
  • @property后留1个空格,()里面,逗号紧跟前一变量,与后一变量之间留1个空格。()外面,先留1个空格,再声明属性。
  • 方法的+,-后面与()之间留1个空格。
  • 返回类型与*之间留1个空格,方法参数中返回类型与*之间留1个空格。
  • 在多参数方法中,每个参数后面都有1个空格。
  1. 每行只能有一个语句
    //不正确写法
NSUInteger objectIndex, stuffCount;

@synthesizeMyView, MyLabelView; //正确写法
NSUIntegerobjectIndex;
NSUIntegerstuffCount;

@synthesizeMyView;
@synthesizeMyLabelView;
  1. 关于空行

    • .h中的空行 --文件说明与头文件包含(#import)之间空1行

      • 头文件包含(#import)之间,如果需要分类区别,各类别之间空1行。
      • 头文件包含(#import)与@class之间空2行。
      • @interface与@class之间空1行。
      • 头文件{}里面,空1行开始声明对象成员,如果需要分类区别,各类别之间空1行。
      • 头文件{}外,空1行书写属性,如果需要分类区别,各类别之间空1行。
      • 属性下面空1行开始写方法,如果需要分类区别,各类别之间空1行。
      • 方法完成后,空1行@end。
      • 如果需要声明protocol,空2行接着写。通常protocol写在@end后面,但是声明在@interface之前。 -.m中的空行
      • 文件说明与头文件包含(#import)之间空1行
      • 头文件包含(#import)之间,如果需要分类区别,各类别之间空1行。
      • @implementation和@synthesize之间空1行, 如果需要分类区别,各类别之间空1行。
      • @synthesize与方法之间空1行。
      • 方法与方法之间空1行。
    • 方法里面的空行
      • 变量声明后需要空1行,如果需要分类区别,各类别之间空1行。
      • 条件、循环,选择语句,整个语句结束,需要空1行。
      • 各功能快之间空1行。
      • 最后一个括弧之前不空行。
      • 注释与代码之间不空行。
      • 类中第个功能模块以 #pragma mark - 分隔,上空两行,下空一行。
      • 每行代码最多不得操作80个字。设置如下:Xcode => Preferences =>TextEditing => Page Guide at column /输入 80即可。

3.4 命名规范

  1. 保留字 Objective-c语言的保留字或关键词应全部使用小写字母,除下表中保留字外,private、protected、public、在类型说明中也作为保留字使用。还有nonatomanic,retain,readwrite,readonly等也有特殊的使用场合。
  1. 方法

    • 方法的名称应全部使用有意义的单词组成,且以小写字母开头,多单词组合时,后面的单词首字母大写。例如:
- (void)getUserInformation……
  • 设置类变量的内容的方法应使用set作为前缀,读取变量的内容的方法应使用get作为前缀。例如:
- (void)getUserName;
- (void)setUserName: (NSString *)userName;
  • 方法中的参数:第一个参数名称要从函数名称上携带出来,第二个参数的首字母小写,多个单词组合时,后面单词首字母大写。参数有别名时,参数别名与参数名一致,但参数名前缀以_。参数别名与前一参数保留1个空格。参数无别名时,以有意义的字母命名。例如:
- (void)myFunctionWithSizeA:(CGSize)sizeA
sizeB:(CGSize)_sizeB;
  • 当参数过长时,每个参数占用一行,以冒号对齐
- (void)writeFisrtNumber:(NSString *)firstStr
withNextNumber:(NSString *)nextStr
withLastNumber:(NSString *)lastStr {
}
  • 如果方法名比参数名短,每个参数占用一行,至少缩进4个字符,且为垂直对齐(而非使用冒号对齐)
- (void)writeA:(NSString *)firstStr
withBBBBBBBBBBB:(NSString *)nextStr
withCCCCCC:(NSString *)lastStr { }
  1. 变量

    • 变量必须起有意义的名字,使其他组员可以很容易读懂变量所代表的意义,变量命名可以采用同义的英文命名,可使用几个英文单词,第一个单词首字母小写,其他单词首字母大写。例如:
NSString *username;
  • 对于一些特殊类型的变量,命名时要带上类型,如NSArray的变量命名为xxxArray,其他的如xxxDictionary,xxxSize等。这样就可以从名称上知道是什么类型的变量。千万不能将NSArray的变量命名为xxxDictionary. 如若是可变的变量加M, eg: xxxMArray。
  • 对于要和interface builder关联的的输出口变量,命名时要后缀以特定的控件名.常见的:
UIViewController:VC          UIImage:Img                UIImageView:ImgView  UIView:View  
UILabel:Label UIButton:Btn  UINavigationBar:NBar  UIToolBar:TBar  
UISearchBar:SBar UITextField:textField  UITextView:TextView
NSArray:Array   NSMutableArray:MArray NSDictionary:Dict   NSMutableDictionary:Dict
NSString:Str   NSMutableString:MStr NSSet:Set      NSMutableSet:MSet
  • 对于使用c语言形式声明的变量,一些特定类型可采用一定的简写:例如:
指针类型:P
结构体类型:Rec
数组类型:Arr
Core Graphic:CG 等。
  • 循环控制变量通常使用单一的字符如:i、j、k等。使用有意义的名字,如objectIndex也是可以的。
  • 尽量避免使用全局变量,如果必须使用全局变量则必须加前缀‘ Pub_’,同时应在变量名称中体现变量的类型。
  • 私有实例变量前加一个下划线,如_myPrivateVarible。
  • 枚举变量也要有相应的前缀来区分不同的enum变量。比如苹果公司的一个enum。例如:
/* Drawing modes for text. */

enumCGTextDrawingMode {
kCGTextFill,
kCGTextStroke,
kCGTextFillStroke,
kCGTextInvisible,
kCGTextFillClip,
kCGTextStrokeClip,
kCGTextFillStrokeClip,
kCGTextClip
};
  1. 常量

    • 避免在程序中直接出现常数,使用超过一次的应以宏定义的形式来替代。
    • 常数的宏定义应与它实际使用时的类型相一致。如以3.0来定义浮点类型,用3表示整型。
    • 常量的命名应当能够表达出它的用途,并且用大写字母表示。例如:
#define PI 3.1415926
  • 宏变量以k开头.eg:
#define kLogin “login”
    • 所有的类名,接口名(Protocol)均以大写字母开头,多单词组合时,后面的单词首字母大写。类,接口名必须是有意义的。
    • 继承自UIView的类以View结尾。例如:
OperatorUsersInfomationView,LabelView等。
  • 继承自ViewController的类以viewController结尾。例如:
HomePageViewController,LoginViewController等。其他类推。
  • 所有保存数据的实体以Model结尾。例如:
UserModel,FriendModel
  • 如果类声明中包含多个protocal,每个protocal占用一行,缩进2个字符
@interfaceRootViewController : UITableViewController <
UITableViewDelegate,
UITableViewDataSource,
UITextFieldDelegate,
UITextViewDelegate > {
……
}

4 修改规范

4.1 新增代码行

新增代码行的前后应有注释行说明。

//修改人,修改时间,修改说明
新增代码行
//修改结束

4.2 删除代码行

删除代码向的前后用注释行说明

//修改人,修改时间,修改说明
要删除的代码行(将要删除的语句进行注释)
//修改结束

4.3 修改代码行

修改代码行以注释旧代码行后再新增代码行的方式进行。

//修改人,修改时间,修改说明
//修改前代码行开始
//修改前代码行
//修改前代码行结束
//修改后代码行开始
修改后代码行
//修改结束

iOS 代码规范的更多相关文章

  1. (转)ios 代码规范

    转自http://blog.csdn.net/pjk1129/article/details/45146955 引子 在看下面之前,大家自我检测一下自己写的代码是否规范,代码风格是否过于迥异阅读困难? ...

  2. iOS代码规范(OC和Swift)

    下面说下iOS的代码规范问题,如果大家觉得还不错,可以直接用到项目中,有不同意见 可以在下面讨论下. 相信很多人工作中最烦的就是代码不规范,命名不规范,曾经见过一个VC里有3个按钮被命名为button ...

  3. 【转】iOS代码规范

    原文地址: http://www.cocoachina.com/ios/20150908/13335.html 简介: 本 文整理自Apple文档<Coding Guidelines for C ...

  4. iOS代码规范

    一.文档结构管理 1.建立Libraries文件夹,所有第三方库放入其中. 2.建立Utilities文件夹,自已封装的类放入其中. 3.建立Constants.h头文件,所有的常量定义于其中.Con ...

  5. iOS代码规范之命名规范

    技术博客http://www.cnblogs.com/ChenYilong/    新浪微博http://weibo.com/luohanchenyilong   命名规范类命名    首字母大写,之 ...

  6. iOS - 代码规范的提示

    我们在些程序时会发现苹果里面有好多非常好的提示 比如: 1.每次SDK升级后 一些方法的方法已经过时了,这时候会给你提示描述该方法已经过期(作用:1.兼顾老版本 2.给开发者一个提示) 2.有时候项目 ...

  7. 构建iOS稳定应用架构时方案选择的思考,主要涉及工程结构,数据流思想和代码规范

    工程结构架构,减少耦合混乱以及防治需求大改造成结构重构,如何构建稳定可扩展可变换的工程结构的思考 我打算采用Information flow的方式自上而下,两大层分为基础层和展现层的结构.基础层分为多 ...

  8. iOS 代码开发规范

    最近公司因为业务增多,又招了一个iOS小伙伴,内心无比开心呀.但是多了一个人,日常代码开发就要统一规范起来,方便日后维护和查找.下边列一下我日常用到一些代码规范. (一).SVN规范 1.代码一定要先 ...

  9. iOS团队代码规范

    iOS团队代码规范 工程之始可能需要的工具: 1.使用CocoaPods类库管理工具.CocoaPods安装和使用教程. 2.下载安装注释插件VVDocumenter-Xcode. 一.项目结构管理 ...

随机推荐

  1. 用vue2 +vue-router2 + es6 +webpack 高仿饿了么app(干货满满)

    #高仿饿了么app商家详情 (vue2 +vue-router2 + es6 +webpack )   ##demo [demo 地址](http://liangxiaojuan.github.io/ ...

  2. JavaScript高级程序设计-(2)基础概念

    for-in 语句 for-in 语句是一种迭代语句,用来枚举对象属性,语法:for (property in expression) statement实例:for(var propName in ...

  3. Daily Scrum Meeting 汇总

    Alpha Daily Scrum Meeting --FirstDay(11.8) Daily Scrum Meeting --SecondDay(11.9) Daily Scrum Meeting ...

  4. Redis为什么使用单进程单线程方式也这么快

    [转] http://www.syyong.com/db/Redis-why-the-use-of-single-process-and-single-threaded-way-so-fast.htm ...

  5. Python爬虫学习(9):Selenium的使用

    1 简介以及安装 Selenium 是什么?一句话,自动化测试工具.它支持各种浏览器,包括 Chrome,Safari,Firefox 等主流界面式浏览器,如果你在这些浏览器里面安装一个 Seleni ...

  6. servlet jsp jdbc bootstrarp mvc分层模式实现的第一个项目

    登录注册界面 这是一个注册和登录的界面 用到了前端页面中自带的一点H5的标签和属性---巩固下 邮箱格式 :type="email"  不能为空:  required=" ...

  7. java工厂模式

    (1)概念大白话:java工厂模式就是客户端(main函数)要创建对象觉得麻烦就让另外一个叫工厂的类帮它创建,然后自己每次要创建对象就叫工厂帮它弄,举个例子,在没有工厂这个"手下" ...

  8. Android SDK Manager 更新代理配置

    转自:http://www.cnblogs.com/tao560532/p/4483067.html 出现问题: 消除SDK更新时,有可能会出现这样的错误:Download interrupted: ...

  9. python基础01 Hello World!

    摘要:简单的Hello Word! python 命令行 如已经安装python,那么在linux命令行中输入 $python 将进入python.乱吼在命令行提示符>>>后面输入 ...

  10. strong,weak, retain, assign的区别

    strong,weak, retain, assign的区别 strong与weak是由ARC新引入的对象变量属性 xcode 4.2(ios sdk4.3和以下版本)和之前的版本使用的是retain ...