OC编码规范

目录
1.格式和换行 2.命名 3.oc下的cocoa编码规范 4.注释要求 5.其他 6.参考文档 附:ARC下编码注意事项

此文档根据apple、google以及其他一些业界知名的oc编码规范整理而成,并作了大量精简,旨在为大家的iOS开发规范提供一份简单、清晰、统一的参考指南。
1.格式和换行
1.1 只使用2个空格来缩进,不使用tab. 1.2 方法长度不超过100行,建议不超过80行。 1.3 方法- 和 + 和返回值之前为1个空格;方法参数之间有一个空格,其他地方不出现多余的空格。 1.4 条件语句的格式,推荐如下:
if (user.isHappy) { //Do something} else { //Do something else}或:(苹果官方代码缩进方式)if (user.isHappy) { //Do something} else { //Do something else}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

1
2
3
4
5
6
7
8
9
10
11
12
13
14

不推荐如下的缩进:
if (user.isHappy){ //Do something}else { //Do something else}
1
2
3
4
5
6
7

1
2
3
4
5
6
7

2.命名
2.1 命名统一使用驼峰命名法;只采纳有广为人知含义的缩写,比如info、msg、UI、HTTP这类。自造的缩写不被认可。总体的命名原则是清晰和一致,避免歧义。 2.2 命名类、协议、常量和typedef结构体时考虑使用前缀,主要目的是为了避免冲突。方法名存在特定类的命名空间内,无需使用前缀。 2.3 方法首字母小写(方法以大写缩略词开始除外);文件夹名和类名首字母大写。不使用下划线作为私有方法的前缀,此方式被苹果保留。 2.4 全局常量尽量不要使用宏定义。宏很可能被重定义,而且引用不同的文件可能会导致宏的不同,所以尽量使用const来定义常量。 2.5 避免使用newXXX、getXXX、setXXX来命名变量和方法。
3.oc下的cocoa编码规范
3.1 使用#pragma mark来分类方法,参考以下结构:

pragma mark - Lifecycle- (instancetype)init {}- (void)dealloc {}- (void)viewDidLoad {}- (void)viewWillAppear:(BOOL)animated {}- (void)didReceiveMemoryWarning {}#pragma mark - Custom Accessors- (void)setCustomProperty:(id)value {}- (id)customProperty {}#pragma mark - IBActions- (IBAction)submitData:(id)sender {}#pragma mark - Public- (void)publicMethod {}#pragma mark - Private- (void)privateMethod {}#pragma mark - Protocol conformance#pragma mark - UITextFieldDelegate#pragma mark - UITableViewDataSource#pragma mark - UITableViewDelegate#pragma mark - NSCopying- (id)copyWithZone:(NSZone *)zone {}#pragma mark - NSObject- (NSString *)description {}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

3.2 重载系统方法时,不要忘记先调用super的方法;比如init、viewdidload等。 3.3 属性必须指定其类型:比如(nonatomic,strong)。 3.4 使用#import引入oc/oc++头文件,使用#include引入c/c++头文件。 3.5 尽量精简你的公开api接口。无需公开的方法应为私有。 3.6 init和dealloc方法中避免使用self.来访问成员变量。 3.7 dealloc方法中对变量的释放应和初始化时的顺序相反。 3.8 对nsstring使用copy。 3.9 不要手动抛出objective-c的异常(但你可以尝试捕获异常以增加应用的健壮性)。 3.10 不同类型的强制转换需要注意是否造成数据丢失、溢出等问题。 3.11 推荐使用@property来自动合成属性,如非必要无需再写@synthesize相关代码。
4.注释要求
注释一般用来解释代码的意图。要保持注释和代码同步更新,表达准确,避免误导。尽可能写自注释的代码。尽量使用单行注释而不是块注释;需要文档化的代码可以使用vvdocumenter-xcode插件来帮助生成。
5.其他
5.1 delegate对象不应该被retain,这样做会造成retain环。 5.2 使用__weak来消除block中的retain环,例如:
__weak __typeof(self)weakSelf = self;dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ __strong __typeof(weakSelf)strongSelf = weakSelf; // use strongSelf here to invoke methods. [strongSelf testSelfMethod]; };
1
2
3
4
5
6

1
2
3
4
5
6

5.3 苹果官方主要推荐的是MVC的架构,其他各种流行架构也是在MVC基础上的变种。写代码时需要注意model/view/controller之间的分离,保持清晰的层次关系。
6.参考文档
苹果cocoa编码指南 google objc编码指南 objc编码指南:by raywenderlich.com
7.附:ARC下编码注意事项
7.1.代码中不能使用retain, release, retain, autorelease 7.2.不重载dealloc(如果是释放对象内存以外的处理,是可以重载该函数的,但是不能调用[super dealloc]) 7.3.不能使用NSAllocateObject, NSDeallocateObject 7.4.不能在C结构体中使用对象指针 7.5.id与void *间的如果cast时需要用特定的方法(__bridge关键字) 7.6.不能使用NSAutoReleasePool、而需要@autoreleasepool块 7.7.不能使用“new”开始的属性名称 (如果使用会有下面的编译错误”Property’s synthesized getter follows Cocoa naming convention for returning ‘owned’ objects”)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容

  • 这篇文档包含了一系列在 iOS 代码中推荐的指导方针、编码惯例和编写代码的最佳实践,主要是为了提高代码的可读性。我...
    CoCodeDZ阅读 1,620评论 0 53
  • 说明:规范的目的是提高效率,所使用的规范应该是适应当前团队的。 项目工程结构 代码结构 实现文件中的代码结构,提倡...
    DH_Fantasy阅读 1,770评论 0 2
  • 建议 为了项目的“整洁性”不建议同时使用多语言开发; 在导入第三方框架之前,充分考虑导入此框架的必要性和风险,遵循...
    青苹果园阅读 820评论 0 0
  • 好的代码有一些特性:简明,自我解释,优秀的组织,良好的文档,良好的命名,优秀的设计以及可以被久经考验。 本文参考若...
    BigTing阅读 578评论 1 2
  • The official raywenderlich.com Objective-C style guide. T...
    lxyz22zp阅读 434评论 0 0