• iOS开发代码规范


    1. 关于命名

     1> 统一要求

    • 含义清楚,尽量做到不需要注释也能了解其作用,若做不到,就加注释

    • 使用全称,不适用缩写

     2> 类的命名

    • 大驼峰式命名:每个单词的首字母都采用大写字母

       例子:MFHomePageViewController

    • 后缀要求

      ViewController: 使用ViewController做后缀

           例子: MFHomeViewController

         View: 使用View做后缀

           例子: MFAlertView

         UITableCell:使用Cell做后缀

           例子: MFNewsCell

         Protocol: 使用Delegate或者DataSource作为后缀

           例子: UITableViewDelegate

         UI控件依次类推

     3> 私有变量

    • 小驼峰式命名:第一个单词以小写字母开始,后面的单词的首字母全部大写

      例子:firstName、lastName

    • 以 _ 开头,第一个单词首字母小写

      例子:NSString * _somePrivateVariable

    • 私有变量放在 .m 文件中声明 

     4> property变量

    • 小驼峰式命名

       例子:///注释

          @property (nonatomic, copy) NSString *userName;

    • 禁止使用synthesize关键词

     5> 宏命名

    • 全部大写,单词间用 _ 分隔。[不带参数]

      例子: #define THIS_IS_AN_MACRO @"THIS_IS_AN_MACRO"

    • 以字母 k 开头,后面遵循大驼峰命名。[不带参数]

      例子:#define kWidth self.frame.size.width

    • 小驼峰命名。[带参数]

      #define getImageUrl(url) [NSURL URLWithString:[NSString stringWithFormat:@"%@%@",kBaseUrl,url]]

     6> Enum

    • Enum类型的命名与类的命名规则一致

    • Enum中枚举内容的命名需要以该Enum类型名称开头

      例子:

    1 typedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) {
    2     AFNetworkReachabilityStatusUnknown = -1,
    3     AFNetworkReachabilityStatusNotReachable = 0,
    4     AFNetworkReachabilityStatusReachableViaWWAN = 1,
    5     AFNetworkReachabilityStatusReachableViaWiFi = 2
    6     };

     7> Delegate命名

    • 类的实例必须为回调方法的参数之一, 如

      -(NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section

    • 回调方法的参数只有类自己的情况,方法名要符合实际含义, 如:

      -(NSInteger)numberOfSectionsInTableView:(UITableView*)tableView

    • 以类的名字开头(回调方法存在两个以上参数的情况)以表明此方法是属于哪个类的, 如:

      -(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

    • 使用did和will通知Delegate已经发生的变化或将要发生的变化, 如:

      -(NSIndexPath*)tableView:(UITableView*)tableView willSelectRowAtIndexPath:(NSIndexPath*)indexPath;
      -(void)tableView:(UITableView*)tableView  didSelectRowAtIndexPath:(NSIndexPath*)indexPath;

    2. 私有方法及变量声明

     1> 声明位置

      在.m文件中最上方,定义空的category进行声明
       例子:

    复制代码
     1        #import "CodeStandardViewController.h"
     2     // 在这个category(类目)中定义变量和方法
     3     @interface CodeStandardViewController ()
     4     {
     5 
     6       // 声明私有变量
     7     }
     8 
     9      // 私有方法
    10     - (void)samplePrivateMethod;
    11     @end
    12 
    13     @implementation CodeStandardViewController
    14     // 私有方法的实现
    15     - (void)samplePrivateMethod
    16     {
    17       //some code
    18     }
    复制代码

    3. 关于注释

     最好的代码是不需要注释的 尽量通过合理的命名

     良好的代码把含义表达清楚 在必要的地方添加注释

     注释需要与代码同步更新

     如果做不到命名尽量的见名知意的话,就可以适当的添加一些注释或者mark

     1> 属性注释

      例子:
        /// 学生
        @property (nonatomic, strong) Student *student;

     2> 方法声明注释:

    复制代码
     1     /** 
     2    * @brief 登录验证
     3    *
     4    * @param personId 用户名
     5    * @param password 密码
     6    * @param complete 执行完毕的block
     7    *
     8    * @return
     9    */
    10   + (void)loginWithPersonId:(NSString *)personId password:(NSString *)password complete:(void (^)(CheckLogon *result))complete;
    复制代码

    4. 关于UI布局

     使用Interface Builder进行界面布局

     Xib文件的命名与其对应的.h文件保持相同

     Xib文件中控件的组织结构要合理,Xib文件中控件需要有合理的可读性强的命名,方便他人理解

    5. 格式化代码

     1> 指针 "*" 位置

      定义一个对象时,指针 "*" 靠近变量

       例子: NSString *userName;

     2> 方法的声明和定义

      在 - 、+ 和 返回值 之间留一个空格,方法名和第一个参数之间不留空格

    - (id)initWithNibName:(NSString *)nibNameOrNilbundle:(NSBundle *)nibBundleOrNil
    {...}

     3> 代码缩进

    • 使用 xcode 默认缩进,即 tab = 4空格
    • 使用 xcode 中 re-indent 功能定期对代码格式进行整理
    • 相同类型变量声明需要独行声明

      例子:

    CGFloatoringX = frame.origin.x;
    CGFloatoringY = frame.origin.y;
    CGFloatlineWidth = frame.size.width;
    • Method与Method之间空一行

      例子:

    复制代码
    1 #pragma mark - private methods
    2 
    3 - (void)samplePrivateMethod
    4 {...}
    5 
    6 - (void)sampleForIf
    7 {...}
    复制代码

     4> 对method进行分组

      使用 #pragma mark - 方式对类的方法进行分组

       例子:

    复制代码
     1      #pragma mark - private methods
     2 
     3   - (void)samplePrivateMethod
     4   {...}
     5 
     6   - (void)sampleForIf
     7   {...}
     8 
     9   - (void)sampleForWhile
    10   {...}
    11   
    12   - (void)sampleForSwitch
    13   {...}
    14 
    15   - (void)wrongExamples
    16   {...}
    17 
    18   #pragma mark - public methods
    19   - (void)samplePublicMethodWithParam:(NSString*)sampleParam
    20   {...}
    21 
    22   #pragma mark - life cycle methods
    23   - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    24   {...}
    25 
    26   - (void)viewDidLoad
    27   {...}
    28 
    29   - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
    30   {...}
    复制代码

     5> 大括号写法

    • 对于类的method: 左括号另起一行写(遵循苹果官方文档)

       例子:

    复制代码
     1      - (id)initWithNibName:(NSString *)nibNameOrNilbundle:(NSBundle *)nibBundleOrNil
     2   {
     3       self = [super initWithNibName:nibNameOrNil
     4 
     5       bundle:nibBundleOrNil];
     6 
     7       if (self) {
     8             // Custom initialization
     9         }
    10 
    11       return self;
    12 }
    复制代码
    • 对于其他使用场景: 左括号跟在第一行后边

      例子:

    复制代码
     1 - (void)sampleForIf
     2 {
     3     BOOL someCondition = YES;
     4     if(someCondition) {
     5         // do something here
     6     }
     7 }
     8 - (void)sampleForWhile
     9 {
    10     int i = 0;
    11     while (i < 10) {
    12         // do something here
    13         i = i + 1;
    14     }
    15 }
    16 - (void)sampleForSwitch
    17 {
    18     SampleEnum testEnum = SampleEnumTwo;
    19     switch(testEnum) {
    20         caseSampleEnumUndefined:{
    21             // do something
    22             break;
    23         }
    24         caseSampleEnumOne:{
    25             // do something
    26             break;
    27         }
    28         caseSampleEnumTwo:{
    29             // do something
    30             break;
    31         }
    32         default:{
    33             NSLog(@"WARNING: there is an enum type not handled properly!");
    34             break;
    35         }
    36     }
    复制代码
    • 任何需要写大括号的部分,不得省略

      错误示例:

    复制代码
    1 - (void)wrongExamples
    2 {
    3     BOOLsomeCondition = YES;
    4     if (someCondition)
    5         NSLog(@"this is wrong!!!");
    6     while(someCondition)
    7         NSLog(@"this is wrong!!!");
    8 }
    复制代码

     

     
     
  • 相关阅读:
    poj 1579(动态规划初探之记忆化搜索)
    hdu 1133(卡特兰数变形)
    CodeForces 625A Guest From the Past
    CodeForces 625D Finals in arithmetic
    CDOJ 1268 Open the lightings
    HDU 4008 Parent and son
    HDU 4044 GeoDefense
    HDU 4169 UVALive 5741 Wealthy Family
    HDU 3452 Bonsai
    HDU 3586 Information Disturbing
  • 原文地址:https://www.cnblogs.com/lishishi/p/5495032.html
Copyright © 2020-2023  润新知