代码规范

一句话编码规范

============

就按照Cocoa API文档上的编码方式写就行。基本你遇到的所有编码风格问题,看API都能找到类似的情形作为参考。本文定义的编码规范,就是以官方文档和示例代码作为基础。


具体的编码规范

============

1、最基础的

类和常量要用大写字母开头,变量和方法用小写字母开头。这个如果写不对,会被读代码的人耻笑的。


2、类的命名规范

同一个功能模块内的类,前面要加上2到3个大写字母作为前缀。可以是模块名的英文缩写,或者汉语拼音缩写,尽量不要和其他模块重复。例如UIButton里的UI,例如NSString里面的NS,例如账单还款模块里的类都用HK开头。


3、常量的命名规范:

一般常量用模块名前缀加大小写命名,不要用全大写,也不要用小写字母开头。例如:


enum {

    NSCaseInsensitiveSearch = 1,

    NSLiteralSearch = 2,

    NSBackwardsSearch = 4

};

const float NSLightGray;

NSString * const NSParseErrorException;


尽量不要用#define来定义程序中使用的常量,整数型常量用enum定义,其他类型常量用const关键字定义。

预处理器宏用#define定义,全大写字母,下划线分隔,例如:


#ifdef DEBUG_IPHONE


4、属性和ivar的命名

基本原则:ivar一律用下划线开头,属性一律不用下划线开头。

定义了 @property 后就不用再单独去定义一个 ivar 了,编译器会自动替你生成ivar的。

到了Xcode 4.5之后,连 @synthesize 也不用写了,编译器会自动替你生成一个带下划线的ivar。但是,万一需要照顾没用4.5的同事(一般是为了照顾客户),在写 synthesize 的时候要定义一个下划线开头的ivar。例如:


@interface FGUser

@property (nonatomicretainNSString *name;

@end


@implementation FGUser

@synthesize name = _name;

@end



但是,不要写成这样:


@interface FGUser

{

    

    NSString *_name;  // 不要!编译器会自动替你生成ivar的。少写一行代码,就少一行需要维护

}

@property (nonatomicretainNSString *name;

@end


@implementation FGUser

@synthesize name; // 不要!这样会生成一个叫做nameivar,容易造成误解。

@end


也就是说,在代码里面使用的时候,要么用 self.name 来使用属性,要么用 _name 来使用ivar,而不会存在 name 这个ivar。这样可以防止笔误,该使用属性的时候不小心使用了ivar。


5、空格的使用

不用空格是可耻的!这点没有争议。操作符周围要有空格,逗号后面要有空格,不能连着写;但是 ( ) 和 [ ] 周围不用空格。对将来读代码的人好一点吧,因为这个人很可能就是你自己。

光荣:

    STAssertTrue([self.response.responseState count] > 0@"bad response");

可耻:

    STAssertTrue([self.response.responseState count]>0,@"bad response");


6、缩进

这是争议最多的编码风格之一。用TAB还是用空格?用2个空格还是4个空格?还是8个空格?

其实,缩进不是目的,目的是要把代码对齐!tab最大的问题是在不同的设置下,显示效果不一样。所以,我们规定如下:

使用空格,4个空格,xcode具体设置如下:



7、大括号的使用

这也是争论相当多的一个编码风格,有闲心的请去这里观战:

http://programmers.stackexchange.com/questions/2715/should-curly-braces-appear-on-their-own-line


而我们规定如下:

当定义类和方法的时候,大括号都单独占一行。例如:

@interface MyClass

{  // 这个大括号单独占一行

    int _id;

}

@end


当 if,for, while 等需要在方法内部使用大括号的时候,第一个的大括号跟语句在同一行上,隔一个空格。例如:


- (void)loadUser

// <-- 这个大括号单独占一行

    for (int i = 0; i < 10; i++) {  // <== 这个大括号_不要_单独占一行


    }

    

    if(YES) {

        

    } else if {

        

    } else {

        

    }

}


8、注释

在注释里要写明白为什么这么写,而不是写程序做了什么。程序做了什么可以通过读代码看出来, 但是很多时候记下来当时为什么要这样写是很重要的。例如可能为了实现⼀一个特殊的 效果,而在代码里做了影响效率的特殊处理,可能代码很简单,但是维护的人如果不 知道当初为什么要这么做,可能就会改成他认为更合理的写法。所以,尤其是代码里 做了⼀一些非常规的处理时,⼀一定要在注释里纪录下来。


对于基类和共用接口,要写清楚如何调用



9、其他

遇到拿不准的地方,一律以Cocoa Touch API、示例源代码的写法为参考。不要自己发明编码风格。苹果有官方的Cocoa编码规范文档,但是只讲了命名,没有规定其他的编码风格,但仍属于必读文档:

官方文档: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CodingGuidelines/CodingGuidelines.html

中文翻译: http://www.cppblog.com/kesalin/archive/2011/11/03/coding_guideline_of_cocoa.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值