美文网首页
代码规范

代码规范

作者: HelloBinary | 来源:发表于2020-09-08 11:56 被阅读0次

    前缀

    主要用于避免和第三方开发者或者Apple之间的命名冲突。前缀的规范:

    1. 通常由2/3个大写字母组成,不是用下划线和子前缀。例如:NS、IB、AB。
    2. 使用前缀来命名类、协议、函数、常数,自定义数据类型(typedef structures),不要用前缀来命名方法。方法存在类的命名区域中,不要在这区域里面使用前缀。
      书写规则
      (1).对于由多个单词组成的名字,使用骆驼风格
      (2).对于方法名字,小写字母开头,不要用前缀。
      (3).对于 函数和常数,和相关类使用相同的前缀,并且大写第一个字母 。例NSLog、NSCellDisabled。
      (4).避免使用下划线作为前缀,会导致方法名称私有 .

    类的命名

    一个类的名称应该 包含一个名词,清楚地表明的类(或类的对象)作用或者意义,名称应该有一个适当的前缀。如:NSString,NSDate。

    协议

    协议的命名应该根据使用协议的相应类行为命名。

    • 大多数协议包含的相关方法,不与任何特定的类关联。这种协议的应该命名为使协议与类不能混淆。一个通常的规则是 用动名词(...ing )。对比NSLocking 、NSLock(看起来像类名)
    • 有的协议包含一些没什么联系的方法(而不是创建多个独立的小协议)。这些协议跟一个类的联系很大,这个类主要体现了这个协议。这种情况下,命名规则为协议名 跟类名字一样 。一个例子是NSObject 协议,这个协议包含一些方法可以查询任何类在父类中的层次位置等。因为NSObject类实现了协议的大部分方法,所以协议可以以类名命名。

    头文件

    怎么命名你的头文件非常重要。因为你的命名表明了类中的内容:

    1. 如果一个类/协议不是一个文件中的一部分,将其声明独立成一个文件,这个文件的名字表明了该类/协议;
    2. 如果有一些联系的声明(类、协议、分类),将它们声明放到一个文件中,文件的命名根据基础的类、协议、分类;
    头文件 声明
    NSString.h NSString和NSSMutableString
    NSLock.h NSLocking协议、NSLock、NSConditionLock、NSRecursive类
    1. 包含框架的头文件: 所有的框架都有一个头文件,以框架命名,包含框架里所有公开的头文件。例Foundation.h-- Foundation.framwork
    2. 为别的框架中类增加API 如果你在一个框架中声明的方法,是另一个框架中类的分类,名字为原来类的名字拼接上“Additions”。一个例子为Applicatiion kit 的NSBuddleAdditions.h头文件。
    3. 相联系的函数和数据类型:如果你有一些相联系的函数、常数、结构体等其他数据类型,将它们放到合适命名的头文件中。例如NSGraphics.h(Applicatiion kit )。

    方法命名

    1. 方法名小写开头,之后每个单词首字母大写(Camel-Case),不要用前缀;
    2. 如果方法代表对象某个动作,方法名用动词开头。-(void)invokeWithTarget:(id)target。 不要使用"do"或"does"这样的词做名字一部分,因为这些辅助动词没什么意义,同时不要在动词前使用副词或形容词。
    3. 如果方法返回的是消息发送者(对象)的属性,用属性命名方法。"get"这个词不需要,除非有多个间接返回的值。 - (NSSize)cellSize;
    4. 在所有的参数前使用关键词,参数前的单词描述参数的意义- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
    5. 当你创建一个基于现有方法的新方法, 在一个已有的方法上添加关键词,不要使用"and"去连接多个参数的关键词(对象属性名) - (id)initWithFrame:(CGRect)frameRect -> - (id)initWithFrame:(NSRect)frameRect mode:(int)aMode cellClass:(Class)factoryId numberOfRows:(int)rowsHigh numberOfColumns:(int)colsWide;
      6.如果方法包含着俩个分开的动作,用and去连接它们- (BOOL)openFile:(NSString *)fullPath withApplication:(NSString *)appName andDeactivate:(BOOL)flag;

    set 和 get 方法

    1. 属性是名词 - (type)noun; - (void)setNoun:(type)aNoun;
    2. 属性表示的是形容词意思 - (BOOL)isAdjective; - (void)setAdjective:(BOOL)flag;
    3. 属性表示的是动词意思 -(BOOL)verbObject; - (void)setVerbObject:(BOOL)flag;
    4. 在属性的名称中,不要通过用分词形式将动词转换为形容词 - (void)setAcceptsGlyphInfo:(BOOL)flag; 不要写成- (void)setGlyphInfoAccepted:(BOOL)flag;
    5. 可以使用情态动词(动词前面“can”、“should”、“will”等)进一步说明属性意思,但不要使用'do'或'does'。 如: - (void)setCanHide:(BOOL)flag;但不要使用'do'或'does' 如 - (BOOL)doesAcceptGlyphInfo;

    当使用get这个词时,只有当方法间接返回多个对象/值 - (void)getLineDash:(float *)pattern count:(int *)count phase:(float *)phase; 注意,这种形式的方法,其中的引用型参数应该能接收NULL,因为方法调用者可能并不需要多个返回值。

    方法参数

    在命名方法参数时候有几个基本规则:

    1. 参数的名字也是骆驼风格
    2. 不要使用“pointer”或"ptr"这些词,参数的类型比参数的名字更能说明它是否是指针
    3. 避免一俩个字母做参数的名字
    4. 避免缩写,难以看懂。

    私有方法

    在Cocoa框架中命名大多数私有的方法用下划线前缀开头,对于你自己的私有方法,不要使用下划线前缀。可以使用一个基于在你公司或项目的形式”xx_”如:SEM_XXX

    函数命名

    函数命名有几下基本原则:

    1. 用你在类/常数中的前缀开头,并且前缀后的首字母大写
    2. 以动词开头,描述函数实现的功能 如:NSHighlightRect NSDeallocateObject
    3. 函数如果是查询一些属性,命名有一些特别的规定:
      (1). 如果函数返回第一个参数的属性,省略动词 float NSHeight(NSRect aRect)
      (2).如果函数返回值是指针,使用"Get" const char *NSGetSizeAndAlignment(const char *typePtr, unsigned int *sizep, unsigned int *alignp)

    属性

    因为属性和存取器方法的对应性质,所以对于属性的命名基本类似存取器方法的名字

    1. 如果属性是名称/动词意思 格式: @property (…) type nounOrVerb
      例:@property (strong) NSString *title; @property (assign) BOOL showsAlpha;
    2. 如果属性是形容词意思,属性名称省略"is"前缀,并且指定存取器get方法的命名 。例如:@property (assign, getter=isEditable) BOOL editable;

    实例变量 用下划线前缀 来什么申明实例变量 如: _title

    viewController代码结构的规定

    1. 所有的属性都使用getter和setter,初始化交给getter去做。
    2. viewDidload 里 写 view相关的事情 如 addSubview 。
    3. viewWillAppear 用来更新Form数据
    4. viewDidAppear 做一些监听类的事情
      5.改变位置可以放在viewWilllayoutSubview或者didLayoutSubview里
      6.在viewDidLayoutSubview确定UI位置关系之后设置autoLayout

    代码排版方面
    1.先是life cycle

    1. 代理方法实现 做好文档标识#pragma mark - UITableViewDelegate
    2. 事件处理
    3. getters and setters 写到最后
    4. ViewController 如果有私有方法 如:日期换算、图片裁剪等 写到分类或者单独一个模块,可以实现代码复用,脱藕。

    相关文章

      网友评论

          本文标题:代码规范

          本文链接:https://www.haomeiwen.com/subject/krqdektx.html