zoukankan      html  css  js  c++  java
  • iOS 代码规范

    1 目的

    统一规范XCode编辑环境下Objective-C、swift的编码风格和标准

    2 适用范围

    适用于所有用Objective-C,swift语言开发的项目。

    3 编码规范

    3.1 文件

    1. 项目文件必须使用一个有意义的名字且前缀以PRJ_。例如:XCcode中下拉刷新的项目文件被命名为’PRJ_PullDownRefresh.xcodeproj’。
    2. 对于文件的目录要按如下结构创建:
      • 建立Libraries文件夹,所有第三方库放入其中.(CocoaPods代替)
      • 建立Constants.h头文件,所有的常量定义于其中。Constants.h文件放入Main文件组里面
      • 项目中所有Group或者文件名称(图片名字等),不要使用汉字命名,尽量使用英文命名,国内特有名词可以使用拼音。

      • 项目中所有Group都需要在项目目录中存在一个真实的目录,Group 中的文件与真实目录中文件一一对应。
    3. 为了不影响阅读,一个类的代码行数尽量不要超过300行;一个方法尽量不要超过30行。有超过的在重构的时候想办法分解。

    3.2 注释

    1. 注释可以采用’ /* */ ’和’ // ’两种注释符号,涉及到多行注释时,尽量使用’ /* */ ’。
    2. 对于一行代码的注释可放在前一行及本行上,不允许放在下一行,更不允许在一行语句的中间加入注释。
    3. 单元文件的文件头注释说明应按如下格式:
    //
    //  ViewController.m
    //  规范Demo
    //
    //  Created by KongYu on 16/5/18.
    //  Copyright © 2016年 SLH. All rights reserved.
    //
    
    //  功能描述:
    //  修改记录:
    //      张三     2016-05-19  改变tableView的headerView的布局
    1. 不必每行都加注释,在3~10行左右的段落做注释要好于每行都做注释,显而易见的代码不加注释。例如:
    if (!returnValue) {//调用登录过程失败无用的注释
      NSLog(@”登录失败”);
    }
    
    1. 方法的注释建议使用Xcode插件VVDocument使用,变量注释使用/** */ (使用的时候可以看到注释), 如:
    /**
     *  <#Description#>
     *
     *  @param application   <#application description#>
     *  @param launchOptions <#launchOptions description#>
     *
     *  @return <#return value description#>
     */
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
      // Override point for customization after application launch.
      return YES;
    }
    

    3.3 编码排版格式

    1. 代码的缩进应使用空格(SPACE),不能使用制表符(TAB),并且缩进以2个字符为单位。4个空格TAB
    2. 中括弧的每一个括弧在源程序中要单独占一行。例如
    for (int i = 0; i < 10; i++) {
    }
    
    1. 空格的使用
      •  关键字与其后的表达式之间要有空格,如: if (expr)或for (expo)
      • 单目操作符不应与它们的操作数分开(如’!’和’^’等)。
      • 除’ , ’外,其它双目操作符应与它们的操作数用空格隔开。例如
    i=i+1;              //错误的写法,操作符两端没有空格
    i = i + 1;            //正确的写法,
    if(a>b)             //错误的写法,逻辑判断符号两端没有空格
    if(a > b)            //正确的写法
    
    • .h中协议<>前面有一个空格。
    • .h中成员声明时,类型与变量之间有至少1个空格。*号靠近变量,不靠近类型。
    • @property后留1个空格,()里面,逗号紧跟前一变量,与后一变量之间留1个空格。()外面,先留1个空格,再声明属性。
    • 方法的+,-后面与()之间留1个空格。
    • 返回类型与*之间留1个空格,方法参数中返回类型与*之间留1个空格。
    • 在多参数方法中,每个参数后面都有1个空格。
    1. 每行只能有一个语句
        //不正确写法
         NSUInteger objectIndex, stuffCount;
    或
    @synthesizeMyView, MyLabelView;
    
    
       //正确写法
       NSUIntegerobjectIndex;
       NSUIntegerstuffCount;
     或
      @synthesizeMyView;
      @synthesizeMyLabelView;
    
    1. 关于空行
      • .h中的空行 --文件说明与头文件包含(#import)之间空1行
        • 头文件包含(#import)之间,如果需要分类区别,各类别之间空1行。
        • 头文件包含(#import)与@class之间空2行。
        • @interface与@class之间空1行。
        • 头文件{}里面,空1行开始声明对象成员,如果需要分类区别,各类别之间空1行。
        • 头文件{}外,空1行书写属性,如果需要分类区别,各类别之间空1行。
        • 属性下面空1行开始写方法,如果需要分类区别,各类别之间空1行。
        • 方法完成后,空1行@end。
        • 如果需要声明protocol,空2行接着写。通常protocol写在@end后面,但是声明在@interface之前。 -.m中的空行
        • 文件说明与头文件包含(#import)之间空1行
        • 头文件包含(#import)之间,如果需要分类区别,各类别之间空1行。
        • @implementation和@synthesize之间空1行, 如果需要分类区别,各类别之间空1行。
        • @synthesize与方法之间空1行。
        • 方法与方法之间空1行。
      • 方法里面的空行
        • 变量声明后需要空1行,如果需要分类区别,各类别之间空1行。
        • 条件、循环,选择语句,整个语句结束,需要空1行。
        • 各功能快之间空1行。
        • 最后一个括弧之前不空行。
        • 注释与代码之间不空行。
        • 类中第个功能模块以 #pragma mark - 分隔,上空两行,下空一行。
        • 每行代码最多不得操作80个字。设置如下:Xcode => Preferences =>TextEditing => Page Guide at column /输入 80即可。

    3.4 命名规范

    1. 保留字 Objective-c语言的保留字或关键词应全部使用小写字母,除下表中保留字外,private、protected、public、在类型说明中也作为保留字使用。还有nonatomanic,retain,readwrite,readonly等也有特殊的使用场合。
    1. 方法
      • 方法的名称应全部使用有意义的单词组成,且以小写字母开头,多单词组合时,后面的单词首字母大写。例如:
    - (void)getUserInformation……
    • 设置类变量的内容的方法应使用set作为前缀,读取变量的内容的方法应使用get作为前缀。例如:
    - (void)getUserName;
    - (void)setUserName: (NSString *)userName;
    
    • 方法中的参数:第一个参数名称要从函数名称上携带出来,第二个参数的首字母小写,多个单词组合时,后面单词首字母大写。参数有别名时,参数别名与参数名一致,但参数名前缀以_。参数别名与前一参数保留1个空格。参数无别名时,以有意义的字母命名。例如:
    - (void)myFunctionWithSizeA:(CGSize)sizeA
                          sizeB:(CGSize)_sizeB;
    
    • 当参数过长时,每个参数占用一行,以冒号对齐
    - (void)writeFisrtNumber:(NSString *)firstStr
                withNextNumber:(NSString *)nextStr
                 withLastNumber:(NSString *)lastStr {
    }
    • 如果方法名比参数名短,每个参数占用一行,至少缩进4个字符,且为垂直对齐(而非使用冒号对齐)
    - (void)writeA:(NSString *)firstStr
            withBBBBBBBBBBB:(NSString *)nextStr
            withCCCCCC:(NSString *)lastStr {
        
    }
    
    1. 变量
      • 变量必须起有意义的名字,使其他组员可以很容易读懂变量所代表的意义,变量命名可以采用同义的英文命名,可使用几个英文单词,第一个单词首字母小写,其他单词首字母大写。例如:
    NSString *username;
    • 对于一些特殊类型的变量,命名时要带上类型,如NSArray的变量命名为xxxArray,其他的如xxxDictionary,xxxSize等。这样就可以从名称上知道是什么类型的变量。千万不能将NSArray的变量命名为xxxDictionary. 如若是可变的变量加M, eg: xxxMArray。
    • 对于要和interface builder关联的的输出口变量,命名时要后缀以特定的控件名.常见的:
    UIViewController:VC          UIImage:Img                UIImageView:ImgView  UIView:View  
    UILabel:Label                       UIButton:Btn                  UINavigationBar:NBar  UIToolBar:TBar  
    UISearchBar:SBar                UITextField:textField     UITextView:TextView
     NSArray:Array       NSMutableArray:MArray         NSDictionary:Dict       NSMutableDictionary:Dict
    NSString:Str         NSMutableString:MStr               NSSet:Set             NSMutableSet:MSet
    
    • 对于使用c语言形式声明的变量,一些特定类型可采用一定的简写:例如:
    指针类型:P
    结构体类型:Rec
    数组类型:Arr
       Core Graphic:CG 等。
    • 循环控制变量通常使用单一的字符如:i、j、k等。使用有意义的名字,如objectIndex也是可以的。
    • 尽量避免使用全局变量,如果必须使用全局变量则必须加前缀‘ Pub_’,同时应在变量名称中体现变量的类型。
    • 私有实例变量前加一个下划线,如_myPrivateVarible。
    • 枚举变量也要有相应的前缀来区分不同的enum变量。比如苹果公司的一个enum。例如:
    /* Drawing modes for text. */
    
    enumCGTextDrawingMode {
      kCGTextFill,
      kCGTextStroke,
      kCGTextFillStroke,
      kCGTextInvisible,
      kCGTextFillClip,
      kCGTextStrokeClip,
      kCGTextFillStrokeClip,
      kCGTextClip
    };
    
    1. 常量
      • 避免在程序中直接出现常数,使用超过一次的应以宏定义的形式来替代。
      • 常数的宏定义应与它实际使用时的类型相一致。如以3.0来定义浮点类型,用3表示整型。
      • 常量的命名应当能够表达出它的用途,并且用大写字母表示。例如:
    #define PI 3.1415926
    
    • 宏变量以k开头.eg:
    #define kLogin “login”
    
      • 所有的类名,接口名(Protocol)均以大写字母开头,多单词组合时,后面的单词首字母大写。类,接口名必须是有意义的。
      • 继承自UIView的类以View结尾。例如:
    OperatorUsersInfomationView,LabelView等。
    
    • 继承自ViewController的类以viewController结尾。例如:
    HomePageViewController,LoginViewController等。其他类推。
    
    • 所有保存数据的实体以Model结尾。例如:
    UserModel,FriendModel
    
    • 如果类声明中包含多个protocal,每个protocal占用一行,缩进2个字符
    @interfaceRootViewController : UITableViewController <
    UITableViewDelegate,
    UITableViewDataSource,
    UITextFieldDelegate,
    UITextViewDelegate
     
    > {
    ……
    }
    

    4 修改规范

    4.1 新增代码行

    新增代码行的前后应有注释行说明。

    //修改人,修改时间,修改说明
    新增代码行
    //修改结束
    

    4.2 删除代码行

    删除代码向的前后用注释行说明

    //修改人,修改时间,修改说明
    要删除的代码行(将要删除的语句进行注释)
    //修改结束
    

    4.3 修改代码行

    修改代码行以注释旧代码行后再新增代码行的方式进行。

    //修改人,修改时间,修改说明
    //修改前代码行开始
    //修改前代码行
    //修改前代码行结束
    //修改后代码行开始
    修改后代码行
    //修改结束
    
  • 相关阅读:
    BZOJ2821 作诗(Poetize) 【分块】
    BZOJ2724 蒲公英 【分块】
    Codeforces 17E Palisection 【Manacher】
    BZOJ2565 最长双回文串 【Manacher】
    Codeforces 25E Test 【Hash】
    CODEVS3013 单词背诵 【Hash】【MAP】
    HDU2825 Wireless Password 【AC自动机】【状压DP】
    HDU2896 病毒侵袭 【AC自动机】
    HDU3065 病毒侵袭持续中【AC自动机】
    HDU2222 Keywords Search 【AC自动机】
  • 原文地址:https://www.cnblogs.com/shidaying/p/5524136.html
Copyright © 2011-2022 走看看