ios编程规范
- 允许使用较长的描述尽量不要使用缩写,而是将完整的意思写出来。源于代码的维护可能会被不同文化背景的programmer阅读
- 适当的命名前缀,比如给变量,协议等,不要给方法加前缀
- 方法命名规则一般以小写字母开头然后中间如果有其他单词第一个首字母大写,比如:fileExistsAtPath:isDirectory: 也有例外的情况,比如使用有名的缩写做前缀TIFFRepresentation (NSImage).
- 函数和常量的名字以所属类的缩写为前缀然后中间单词首字母大写,比如NSRunAlertPanel NSCellDisabled
- 不要给方面前面加下划线做前缀,这样的话此方法就是私有的,但是可以给实例变量加下划线前缀
- 命名类名时可以加前缀,即之上的prefix并指明这个类的功能
- 命名协议名一般都是...ing例如:NSLocking Good. NSLock Poor (seems like a name for a class).
Header Files 命名
- 声明独立的类或者协议,那么类名就以这个独立的类或者协议名称命名 NSLocale.h The NSLocale class.
- 声明相关的类或者协议,如果类,代理或者协议都是相关的一组,就将主要的一个作为命名名字
NSLock.h NSLocking protocol and NSLock, NSConditionLock, and NSRecursiveLock classes.
NSString.h NSString and NSMutableString classes. - 包含framework的头文件,每一个框架应该有一个头文件。名字是该框架隶属的类名 Foundation.h Foundation.framework.
- 在一个类中添加的API是属于其他framework的,一个类的category里面命名的方法又包含在其他的framework中时,就在原来类名上加Additions is the NSBundleAdditions.h header file of the Application Kit.
- 相关的函数和数据类型,如果是相关的函数,常量,数据结构或其他数据类型那么就命名一个合适的名字
Method General Rules 通常规则
- 以小写字母开头,中间单词首字母大写不要使用前缀,除非是很常用的前缀或者想声明方法为私有的
- 以动词开头如果方法名称要表示某种行为- (void)invokeWithTarget:(id)target;
- 在动词前不要加形容词或者副词,不要使用do或者does作为名称的一部分
- 如果方法直接返回receiver的一个属性,那么就直接后面写这个属性而不需要加get,除非这个方法是间接的返回一个或者多个属性。比如- (NSSize)cellSize;可能直接返回size,那么就不要加get
- 每一个参数前都要加关键字,即将整个方法连接成完整的一个句子
- (void)sendAction:(SEL)aSelector to:(id)anObject Right.
- 每一个关键字要能描述参数
- (id)viewWithTag:(NSInteger)aTag; Right. - (id)taggedView:(int)aTag; Wrong.
- 方法中如果描述的是两个或者更多个不同的行为要使用and连接 - (BOOL)openFile:(NSString *)fullPath withApplication:(NSString *)appName andDeactivate:(BOOL)flag;
- 如果是receiver的多个属性那么不要使用and来连接
(int)runModalForDirectory:(NSString *)path file:(NSString *)name types:(NSArray *)fileTypes;
- (int)runModalForDirectory:(NSString *)path andFile:(NSString *)name andTypes:(NSArray *)fileTypes;
Accessor Methods
- 如果方法是用来返回或者设置对象属性的话,比如get和set方法,那么命名规则是:
- 如果变量名是名词,那么:- (NSString *)title; 类型+名称 - (void)setTitle:(NSString *)aTitle; void +set+名称首字母大写+类型+a+名称
- 如果变量名是形容词, 那么:- (NSString *)title; 类型+名称 - (void)setTitle:(NSString *)aTitle; void +set+名称首字母大写+类型+名称
- 不要将动词和形容词,副词一起混用,例如:
- (void)setAcceptsGlyphInfo:(BOOL)flag; Right.
- (BOOL)acceptsGlyphInfo; Right.
- (void)setGlyphInfoAccepted:(BOOL)flag; Wrong.
- (BOOL)glyphInfoAccepted; Wrong.
- 可以使用“can”, “should”, “will”, and so on但是不能使用do和does
- 可以使用get如果方法是多个对象不直接返回,例如:- (void)getLineDash:(float *)pattern count:(int *)count phase:(float *)phase;
Private Methods
- 不要在方法前仅仅使用下划线来标注这个是私有的方法,苹果保留这个功能,因为很有可能会覆盖系统框架中的私有方法如果名称恰好相同
- 可以使用自己唯一的标示加下划线来命名私有方法,比如公司名称等 BF_addObject