• 关于手思3.0 代码规范


    关于手思3.0 代码规范

    工程之始可能需要的工具:

    1、使用CocoaPods类库管理工具。CocoaPods安装和使用教程。

    2、下载安装注释插件VVDocumenter-Xcode

    3.使用代码对齐的Xcode插件

    XAlign:XALign

    ClangFormat ClangFormat-Xcode

    4.快速进入沙盒目录

    ZLGotoSandboxPlugin:查看沙盒的插件,当运行模拟器的时候,Shift + Common + w 直接查看当前模拟器下程序的沙盒。

    一、手思项目结构管理

    #pragma mark -关于手思3.0对于文件的目录要按如下结构创建:
    -CategoryEx(所有类别类扩展放在里面)
    -HelpMacro(项目宏定义)
    -Resources (所有图片资源,声音文件,其他资源,相应资源放入相应组(Group)中)
    -Utilities (工具集合,网络请求,工具类,第三方库等)
    -MobileSiBuControllers(所有项目模块代码文件)
    -CustomUI  (自定义UI控件)
    -引用外部文件或者某个单独的功能时,放在单独的组中

    关于手思3.0规范要点

    1.命名规范(详见下文)
    2.所有控制器继承BaseViewController  如:@interface HomeViewController : BaseViewController
    3.ViewController,view,model应添加前缀SB (MVC) 4.使用DLOG(<#...#>)打印而不是NSLog(..),有大量打印信息时应把DLOG注释掉 5.使用快捷键Command+shift+B,检查代码内存泄漏问题 6.所有保存数据的实体以Model结尾,如:UserModel 7.viewWillAppear,viewWillDisappear等写在viewDidLoad上面,dealloc写在.m文件最底行
    8.不能出现警告,过时方法用新方法替代,没有用到的变量删掉或注释掉

    二、编码规范

    为了提交团队合作效率,在项目开发中,对于项目、类,变量等的命名,应该要易读,易理解

    一)、命名规范

    关于命名的一般性的原则

    1.最少字符,就是要尽量的减少命名对象的长度,尽量选择字符少的名词

    2.名符其实,命名应该能直观的描述被命名对象是什么或者做什么
    3.避免歧义,尽量不要采用多义词,也不要使用命名组合之后产生多义的方式
    4.上下文一致,比如谓词的统一性,如果都是集合类,那么使用Remove表示删除操作,那么所有上下文就应该都用这个Remove,而不要再用Delete
    5.少用缩写,除非是很常见的缩写或者项目中定义好的缩写,否则不要使用缩写
    6.优先使用全局常量而非宏,应使用static方式声明常量;

    主要点:控制器,自定义view以SB开头
    多单词组合时,后面的单词首字母大写
    如SBLoginViewCotroller,SBHomeViewCotroller
       SBPopView

    鉴于目前项目使用的是MJExtensio进行字典模型自动转换,所以属性名与后台保持一致即可

    (1)类命名

    1、变量首字母小写,后面单词首字母大写,如userPassWord

    2、使用能够反映类功能的名词短语(使用英文翻译)

    3.命名时带上类型,如xxxTv,xxxView,xxxStr等

    4、文件名应包含描述继承的类,如:文件名:BaseViewController   类:UIViewController
    所有类名,接口名(Protocol)均以大写字母开头,多单词组合时,后面的单词首写字母大写。

    如:@interface LoginViewCotroller : UIViewController
    View--所有扩展自UIView的类以View结尾,如: GridView,StarView,OpenGLView,EmojiPageView。
    ViewController-所有扩展自UIViewController的类以ViewController结尾,
    Model--所有数据Model以Model结尾
     
    如 HomePageViewControler, LoginViewController。
    如果名称太长则以VC结尾:如 AllPicturePreviewVC
    

    4、自定义控件命名,以相应类名为后缀命名。
    对于UI相关的变量,命名时要后缀以特定的控件名,如UILabel的变量命名为xxxLabel,xxxCell,其他的如xxxButton,xxxTableView,xxxImageView等;

    常见类型简写如下:
    UIViewController:VC    UIImage:Img  UIImageView:Iv
    UIView:View  UILabel:Lbl     UIButton:Btn
    UINavigationBar:NBar   UIToolBar:TBar  UISearchBar:SBar
    UITextField:TF  UITextView:Tv   NSArray:Array
    NSMutableArray:MArray    NSDictionary:Dict  NSMutableDictionary:MDict
    NSString:Str    NSMutableString:MStr     NSSet:Set       NSMutableSet:MSet
    

    (2)特殊类命名

    举例:BaseClient、ImageStore


    (3)分类(类别)命名

    与类命名相同,此外需添加要扩展的类名和“+”
    举例:NSString+URLEncoding

    (4)协议(委托)命名

    与类命名相同,此外需添加“Delegate”后缀
    举例:UITableViewDelegate,MBProgressHUDDelegate

    (5)方法及参数命名

    方法:

    首字母小写,之后每个单词首字母都大写
    方法名使用动词短语,能具体表达出该方法的功能

    参数:

    首字母小写,之后每个单词首字母都大写
    具有足够的说明性

    举例:

    - (void)viewWillAppear:(BOOL)animated
    - (void)setupPostValue:(int)value
    - (void)adjustFontWithMaxSize:(CGSize)maxSize
    

    参数要用描述该参数的标签命名

    - (void) sendAction:(SEL)aSelector to:(id)anObject forAllCells:(BOOL)flag;  //对
    - (void) sendAction:(SEL)aSelector :(id)anObject :(BOOL)flag;               //错
    


    当参数过长时,每个参数占用一行,以冒号对齐。如:

    -(void)saveUserInfo:(NSMutableDictionary *)dict
               userName:(NSString *)name
               passWord:(NSString *)pwd{
        ...
    }
    

     
    (6).点击事件响应(下面几种写法都可以)

    -(void)loginButtonClicked  (不推荐)
    -(void)loginButtonClicked:(id)sender (推荐)
    或
    -(void)loginButtonAction
    -(void)loginButtonAction:(UIButton *)sender
    -(void)backBtnAction:(id)sender
    
    手势事件
    - (void)handleTapGesture:(UITapGestureRecognizer *)tapGesture
    

    getset 开头的方法有特殊的意义,不要随意定义。

    1. set 是属性默认的设置方法,如果函数不是为了设置类成员,则不要用 set 开头,可用 setup 替代。
    2. get 和属性方法无关,但在 Cocoa 中,其标准行为是通过引用传值,而不是直接返回结果的。欲获取变量,直接以变量名为名,如:userInfomation,而不是 getUserInfomation

    属性和变量申明问题

    #pragma mark -变量问题
    1.私有变量不应该写在h里面,h是对外公开的,更应该写到m里面
    2.实例变量(成员变量),最好带上前缀下划线
    3.变量需要有一定注释
    4.成员变量不应少于3个字符,采取见名知义原则
    
    @interface ViewController ()
    {
        //成员变量
        NSString  *_name;     //名字
        int       *_age;      //年龄
        NSString  *_passWord; //密码
        NSArray   *_array1;
    }
    
    //属性变量
    @property (nonatomic,strong) NSArray *array2;
    注意点:私有属性,变量写在.m文件中,.h文件中只写对外公开的属性变量
    
    方法和变量的命令应该尽可能做到自描述。
    良好的风格:
    UIButton *settingsButton;
    
    不良的风格:
    UIButton *setBut;
    

    控件及数据的初始化

    #pragma mark -初始化UI控件及数据源
    使用initUI(或createSubview) 管理UI控件初始化,initDataSource初始化array,dict
    //初始化所有UI相关
    - (void)initUI
    {
        [self initButton];
        [self initLabel];
    }
    
    //初始化数据源
    -(void)initDataSource
    {
        NSString *dataPath = [[NSBundle mainBundle] pathForResource:@"Data" ofType:@"plist"];
        NSMutableArray  *pesonArray=[[NSMutableArray  alloc]initWithCapacity:0];
    }
    
    - (void)initButton
    {
        UIButton   *CSButton=[UIButton  buttonWithType:UIButtonTypeCustom];
        CSButton.frame=CGRectMake(100,100, 100, 80);
        [CSButton  addTarget:self action:nil forControlEvents:UIControlEventTouchDown];
        [self.view  addSubview:CSButton];
    }
    
    -(void)initLabel
    {
        UILabel  *CSLabel=[[UILabel  alloc]initWithFrame:CGRectMake(10, 10, 100, 25)];
        CSLabel.textAlignment=NSTextAlignmentLeft;
        CSLabel.font=[UIFont  systemFontOfSize:14];
        CSLabel.text=@"标签";
    }
    

    规范示例

    #pragma mark ---规范示例 Coding Guidelines for Cocoa--
    代码越简洁越明确越好,但是不能因为简洁而导致语义不明确:
    代码 	评价
    insertObject: atIndex: 	好
    insert:at:              不明确,什么被插入?at指什么
    removeObjectAtIndex: 	好
    removeObject:           好,没有之前讨论的那些问题
    remove:                 不明确,什么被移除了
    
    通常,不要缩写对象的名称。即使它们很长,也全拼:
    代码 	评价
    destinationSelection 	好
    destSel                 不明确
    setBackgroundColor: 	好
    setBkgdColor: 	不明确
    --你可能认为某些缩写是众所周知的。但凡是无绝对,尤其是当开发者和你文化、语言背景不一样,看这些缩写就可能产生歧义。
    

    良好的编程风格

    多使用字面量语法,少用与之等价的方法(缩短源码长度,更为易读)

        良好的风格:(字面量语法)
        NSArray      *names = @[@"Brian", @"Matt", @"Chris", @"Alex", @"Steve", @"Paul"];
        NSDictionary *productManagers = @{@"iPhone" : @"Kate", @"iPad" : @"Kamal", @"Mobile Web" : @"Bill"};
        NSNumber *shouldUseLiterals = @YES;
        NSNumber *intNumber=@1;
        NSNumber *floatNumber=@2.5f;
        
        //取值
        NSString *name=names[1];
        NSString *product=productManagers[@"iPhone"];
        不良的风格:
        NSArray *names = [NSArray arrayWithObjects:@"Brian", @"Matt", @"Chris", @"Alex", @"Steve", @"Paul", nil];
        NSDictionary *productManagers = [NSDictionary dictionaryWithObjectsAndKeys: @"Kate", @"iPhone", @"Kamal", @"iPad", @"Bill", @"Mobile Web", nil];
        NSNumber *shouldUseLiterals = [NSNumber numberWithBool:YES];
        NSNumber *intNumber = [NSNumber numberWithInt:1];
        NSNumber *floatNumber = [NSNumber numberWithFloat:2.5f];
        
        //取值
        NSString *name=[names objectAtIndex:1];
        NSString *product=[productManagers  objectForKey:@"iPhone"];


    其他

    性能优化
    1.用  DLOG(<#...#>)代替 NSLog(...)

    2.必要时使用懒加载

    3.重用

    代码片段
    熟练使用代码片段库可以提高编码的速度。 Xcode4 中,打开一个项目并让右侧编辑区可视,然后点击右侧底部面板的第四个 {} 图标,打开代码片段库,你可以将常用的代码拖入其中。以下是一个最新的开源代码片段库链接:
    https://github.com/mattt/Xcode-Snippets

    参考资料
    [1] 《 NYTimes Objective-C Style Guide 》 https://github.com/NYTimes/objective-c-style-guide
    [2]   https://github.com/VincentSit/NYTimes-Objective-C-Style-Guide-ZH (纽约时报 移动团队 Objective-C 规范指南)
    [3]   https://github.com/Chinamobo/iOS-Team-Norms (Chinamobo iOS 团队规范)

    荐 Objective-C编码规范:26个方面解决iOS开发问题

     
  • 相关阅读:
    c#抓取和分析网页的类
    优化 Microsoft Windows Media Services 9 Series
    IIS中HTTP压缩概述
    网站CND加速器是什么
    如何分析网页数据并且去除Html标签(C#)
    告别ASP.NET操作EXCEL的烦恼(总结篇)
    Windows Media Services 9 系列常见问题解答
    字体收藏
    水晶按钮最终效果图
    gzip
  • 原文地址:https://www.cnblogs.com/sixindev/p/4444705.html
Copyright © 2020-2023  润新知