iOS开发规范

iOS开发规范

公司名称 XXX有限公司 文档编号
文档名称
起 草 蔡令
审 批

修订历史

版本号 日期 状态 修订人 摘要
1.0 2020/4/22 C 蔡令 起草
状态标识:C –Created A- Added M - Modified D - Deleted

阅读指南

单位/人员 建议阅读内容

目录
一.命名规范 4

1.1变量与常量 4
1.2类、分类、协议、对象、block 5

1.3属性 6
1.4方法 6
1.5通知和异常 7
1.6资源命名 7
1.7命名建议 7
1.8Constant命名规范 7

二.格式规范 8

2.0编码代码的块基本规范 8
2.1空格 9
2.1.1属性相关 9
2.1.2方法相关 9
2.1.3语句 9
2.1.4容器 9
2.2 空行 10
2.4 折行 10
2.5 大括号{} 10

三.控制规范 12

3.1switch 12
3.2if-else 12

四.内存管理规范 14

4.1 注释方式 14
4.3延迟调用范围 15
4.4类型设计范围 15

五.代码组织规范 16

5.1地址参考 16
5.2VIEWCONTROLLER 控制器代码规格 16

六. 注意要点 16
七. 工程项目结构规范 17

一.命名规范
1.1变量与常量

1).局部变量:
1.【强制】局部变量不应该包含下划线,尽量避免单个字符变量,力争⻅名知义。

正 例 : CGFloat cellHeight = 22;
反例: NSString a = @"This is test..."; X 反例: NSInteger _index = 10;

2).成员变量:

1.【强制】以空格键(下划线)开头,小驼峰命名。
√ 正例: UIButton _myInstanceVariable; 
X 反例: UIView coverView;

3).常量:
1.【强制】以小写 k 开头,使用驼峰式命名规则。
2.【建议】使用 const 来实现常量,不建议使用 define 宏定义方式

√ 正例:
static int const kNumberOfFiles = 50;
static NSString const kUserKey = @"yixin";
X 反例:
int MAXVALUE = 200;
#define CompanyName @"RayWenderlich.com" #define thumbnailHeight 2

4).枚举:
1.【强制】枚举命名要添加相关的类名前缀,驼峰命名,并且枚举值命名要加类型前缀。
2.【建议】建议使用 typedef NS ENUM() 形式,不用 C 定义方式。

√ 正例:
typedef NS_ENUM(NSInteger, UIViewAnimationTransition) { UIViewAnimationTransitionNone, UIViewAnimationTransitionFlipFromLeft, UIViewAnimationTransitionFlipFromRight, UIViewAnimationTransitionCurlUp, UIViewAnimationTransitionCurlDown,
};
X 反例:
// 命 名
typedef NS_ENUM(NSUInteger, YCACCOUNTTYPE) { YCACCOUNTTYPE_CUSTOM, YCACCOUNTTYPE_MAIL, YCACCOUNTTYPE_TEL,
};

// C⻛格typedef enum : {
CameraModeFront, CameraModeLeft, CameraModeRight,
} CameraMode; 

5). 宏定义:
宏定义使用方式分两种⻛格:常量与工具宏,常量宏使用全大写字⺟,由下划线(_)分割;工具宏使用全大写字⺟形式。示例如下:
#define CLS HAS LOAD METHOD //定义常量
#define ISSELECTOR(sel) sel_isMapped(sel) // 定义一个工具

1.2类、分类、协议、对象、block
1).类:
1.【强制】类名以大写字⺟开头,应该包含一个名词来表示它代表的对象类
2.【建议】同时可以加上必要的前缀,为表达清楚、减少重名,建议采用:前缀 + 模块 + 功能 + 类型的命名方
式。
√ 正例:NSString
√ 正例:YXHomeBannerView
X 反例:HeaderView (不明确,不能⻅名知意)

2). 分类:
1.【建议】分类需要能够通过名称理解内部提供的方法是什么功能。
2.【建议】不要用官方框架/类库的名称前缀,最好前缀 3 个字符⻓。

// 建 议
@interface UIViewController (YXMediaPlaying) @interface NSString (YXStringEncodingDetection)
// 不建议
@interface NYTAdvertisement (private) @interface NSString (NYTAdditions)

3).协议:
1.【建议】协议名称应该清晰地表示它所执行的行为,而且要和类名区别开来。说明:协议通常使用 ing 词尾来命名一个协议,比如 NSCopying,NSLocking。
2.【建议】有些协议本身包含了很多不相关的功能,主要用来为某一特定类服务,这时候可以直接用类名来命名这
个协议,比如 NSObject 协议,它包含了 id 对象在生存周期内的一系列方法。
√ 正例:NSCopying、 NSObject

4). 对象:
1.【建议】对象命名时建议采用 修饰/义务名称+类型。如:goodsNameLabel
说明:如果只用修饰命名会引起歧义, 比如叫:goodsName,这个到底是个 NSString 还是 UILabel? 同样的, 如果只用类型来命名则会缺失作用信息, 比如叫:label, 不知道具体功能。
5). block
block 的命名采用:前缀+名称+Block 的形式,名称采用驼峰命名,示例如下:
typedef void (^AFNetworkReachabilityStatusBlock)(AFNetworkReachabilityStatus statu s);

1.3属性
1).【强制】属性命名,采用小驼峰命名,勿用下划线开头(PS:默认 XCode 会自动生成与之对应的下划线为前缀的成
员变量)。
2).【强制】不要使用 new 开头。
3).【强制】不要带有 is 前缀,布尔类型可以复写 getter 方法命名。
4).【强制】不要带有 get 前缀, getter 方法会自动添加。

说明:如果涉及到接口字段命名不符或不规范,请使用模型与字典转换工具(YYModel、MJExtension 等) 提供的modelCustomPropertyMapper 等类似方法来摸映射.
√ 正例ÿ
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值