iOS代码规范

命名规则

一般原则
清晰

命名最好清晰又简洁,但是不能过于简洁而失去了清晰。 不要用单词的简写,尽量用单词的全称。可以看看苹果的API格式,仿照苹果的命名,尽量用英文,而不是拼音。

insertObject:atIndex: //这是个好例子 
insert:at: //不够清晰,插入的是什么?at又指的是什么? 

名称通常不缩写,即使名称很长,也要拼写完全

			代码								点评
destinationSelection						Good.
destSel										Not clear.
setBackgroundColor:							Good.
setBkgdColor:								Not clear.

关于缩写,你可能会认为某个缩写广为人知,但有可能并非如此,尤其是当你的代码被来自不同文化和语言背景的开发人员所使用时。当然,你可以使用少数非常常见,历史悠久的缩写。所有可以使用的缩写见这个列表

建议:类、变量和函数命名参考苹果的头文件及优秀的开源项目。
一致性

尽可能使用与 Cocoa 编程接口命名保持一致的名称。
在使用多态方法的类中,命名的一致性非常重要。在不同类中实现相同功能的方法应该具有相同的名称
前缀

由于苹果没有命名空间,因此使用前缀可以防止和苹果以及其他第三方库的命名冲突。

  • 不要使用下划线或子前缀
  • 对class、protocol、structure、公开方法、常量命名时使用前缀,成员方法和结构体字段时不使用前缀。
  • Category 方法统一使用xy_methodName 形式进行扩展
书写约定

命名时单词之间不要使用下划线、破折号等标点符号分隔,请使用驼峰命名法对方法、变量进行命名
如果方法名使用一个广为人知的大写首字母缩略词开头,则首字母可以大些。如NSImage
中的TIFFRepresentation
如果方法名或者常量名使用了前缀,则前缀之后所有单词的首字母都要大写。如NSRunAlertPanel
避免使用下划线来表示名称的私有属性。苹果公司保留该方式的使用。如果第三方这样使用可能会导致命名冲突,他们可能会在无意中用自己的方法覆盖掉已有的私有方法,这会导致严重的后果

文件夹命名

创建文件夹最好创建实体文件夹,找到工程目录,创建相应文件夹并拖入工程。
文件夹命名使用相应模块的英文,首字母要大写。

Bundle Identifier 命名

Bundle Identifier:采用反域名命名规范,全部采用小写字母,以域名后缀+公司顶级域名+应用名形式命名,例如:com.rogrand.dianbangbang

类和协议的命名

类名应该包含明确描述该类/对象是什么或者做什么的名词,类名要有合适的前缀。
协议应根据它包含的方法的作用来命名。

  • 一般是:前缀 + 功能 + 类型。例如:MW + Login + ViewController。
  • 大多数协议仅组合一组相关的方法,而不关联任何类,这种协议的命名应该使用动名词(ing),以不与类名混淆比如NSLocking
  • 有些协议组合一些彼此无关的方法(这样做是避免创建多个独立的小协议)。这样的协议倾向于与某个类关联在一起,该类是协议的主要体现者。在这种情形,我们约定协议的名称与该类同名。NSObject 协议就是这样一个例子。这个协议组合一组彼此无关的方法,有用于查询对象在其类层次中位置的方法,有使之能调用特殊方法的方法以及用于增减引用计数的方法。由于 NSObject 是这些方法的主要体现者,所以我们用类的名称命名这个协议。
头文件

声明孤立的类或协议:将孤立的类或协议声明放置在单独的头文件中,该头文件名称与类或协议同名
声明相关联的类或协议:将相关联的声明(类,类别及协议) 放置在一个头文件中,该头文件名称与主要的类/类别/协议的名字相同

@protocol SDWebImageManagerDelegate 
@optional 
- (BOOL)imageManager:(nonnull SDWebImageManager *)imageManager shouldDownloadImageForURL:(nullable NSURL *)imageURL; 
@end 
@interface SDWebImageManager : NSObject 
@property (weak, nonatomic, nullable) id delegate; 
// ... 
@end 
方法命名规范
一般规则

小写第一个单词的首字符,大写随后单词的首字符,不使用前缀。有两种例外情况:
1,方法名以广为人知的大写字母缩略词(如TIFF or PDF)开头;
2,私有方法可以使用统一的前缀来分组和辨识
表示对象行为的方法,名称以动词开头

- (void)invokeWithTarget:(id)target: 
- (void)selectTabViewItem:(NSTableViewItem *)tableViewItem 

名称中不要出现 do 或 does,因为这些助动词没什么实际意义。也不要在动词前使用副词或形容词修饰

  • 方法返回接收者的某个属性,直接用属性名称命名。
- (NSSize)cellSize; 		//优 
- (NSSize)calcCellSize; 	//差 
- (NSSize)getCellSize;	    //差 

只有在方法需要间接返回多个值的情况下,才使用 get

//NSBezierPath 
- (void) getLineDash:(float *)pattern count:(int *)count phase:(float *)phase; 

像上面这样的方法,在其实现里应允许接受 NULL 作为其 in/out 参数,以表示调用者对一个或多个返回值不感兴趣。

  • 参数前面的单词要能描述该参数
- (void)sendAction:(SEL)aSelector to:(id)anObject forAllCells:(BOOL)flag;	 //优 
- (void)sendAction:(SEL)aSelector :(id)anObject :(BOOL)flag;					 //差 
- (id)viewWithTag:(int)aTag; 												 //优 
- (id)taggedView:(int)aTag; 												 //差 

细化基类中的已有方法:创建一个新方法,其名称是在被细化方法名称后面追加参数关键词
//NSView

- (id)initWithFrame:(NSRect)frameRect; 
//NSMatrix - NSView 的子类 
- (id)initWithFrame:(NSRect)frameRect; 
mode:(ind)aMode ;
cellClass:(Class)factoryId ;
numberOfRows:(int)rowsHigh;
numberOfColumns:(int)colsWide; 

不要使用 and 来连接用属性作参数关键字

- (int) runModalForDirectory:(NSString *)path file:(NSString *)name types:(NSArray *)fileTypes; //优 
- (int) runModalForDirectory:(NSString *)path andFile:(NSString *)name andTypes:(NSArray *)fileTypes; //差 
访问方法

如果属性是用名词描述的,则命名格式为:

- (type)noun; 
- (void)setNoun:(type)aNoun; 

如:

- (NSColor *)color; 
- (void)setgColor:(NSColor *)aColor; 

如果属性是用形容词描述的,则命名格式为:

- (BOOL)isAdjective;
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值