美文网首页
汇图-iOS开发规范

汇图-iOS开发规范

作者: sunpermeer | 来源:发表于2019-01-02 09:39 被阅读0次

    iOS开发规范

    目录

    • 格式与换行
    • 命令
    • OC编码规范
    • 注释要求
    • 其他

    • 此文档根据apple以及行业内比较知名的OC编码规范整理归纳而成,意在为以后的iOS开发规范提供一份简单、统一的执行标准。

    1.格式与换行

    1.1使用Xcode默认使用四个空格来缩进

    1.2方法长度较长时可以考虑提取其中一部分。

    1.3-方法和+方法和返回值前面的左括号间隔一个空格

    • 例:- (void)func {

        }

    1.4条件语句采用苹果推荐的代码缩进方式。

    • 推荐写法
    BOOL isOk = YES;
    if (isOk) {
        //...
    }else{
        //...   
    }
    

    2.命名

    2.1命名统一使用驼峰命名法;只采纳有广为人知含义的缩写。自造的缩写不被认可。总体的命名原则是清晰一直,避免歧义。

    2.2,确保整个项目中的自定义类名称是统一的,同时确保类名需要大写字母开头。

    2.3 类名命名需要结合功能或者模块。

    2.4 方法命名小写字母开头,文件夹首字母大写开头。不要使用下划线开头作为方法的前缀。

    2.5 定义类的变量,不需要暴露的变量均放在实现文件里定义,同时视图类变量,在类拓展下定义成属性。数据类型的变量定义在@implementation下的大括号内。

    3.OC编码规范

    3.1使用#pragma mark 来分类方法,如:

    #pragma mark - UITableViewDataSource
    
    #pragma mark – Private Methods
    

    3.2重载系统方法的时候,如无特殊情况均需先调用super的方法。

    3.3 属性必须指定其类型,如(nonatomic,strong)

    3.4 使用#import引入oc/oc++文件,使用#include引入c/c++文件

    3.5尽量减少公开的api接口的数量。

    3.6枚举的定义使用如下方式

    typedef NS_ENUM(NSInteger,BgViewType) {
        BGVIEWTYPE_DEFAULT = 1,
        BGVIEWTYPE_TIPREMOVE, //点击移除
    };
    

    4. 注释要求

    4.1 新版本Xcode自带有添加注释的功能

    • 单行注释:在方法的地方按Command+/
    • 标注的功能,快捷键是Command+ Option + /
    • 需要在方法名的上面(空白)处按Command+ Option + /

    4.2 在新建一个类的时候需要在头文件中添加注释来说明其作用。

    4.3 在穿件接口类的时候,同样需要在头文件添加注释来说明该类的用处。

    4.4 一些过于简单的注释尽量不要添加。


    5. 其他

    5.1 ifelse语句

    • 不论if或者else下一个还是有多个语句,都必须带上大括号。同样case语句也是如此。
    • 推荐写法
    if(case) {
      return success;
    }
    
    • 不允许的写法
    if (case)
      return success;
    //或者
    if (case) retrun success;
    
    

    5.2 布尔值

    • 推荐写法
    if (someObject) {
        //...
    }
    
    if (![object boolValue]) {
        //...
    }
    

    5.3 三元操作符

    • 当需要提高代码的清晰性和间接性,三元操作符?:才会使用。
      *推荐写法
    NSInteger value = 5;
    result = (value != 0) ? x : y;
    
    BOOL isHorizontal = YES;
    result = isHorizontal ? x : y;
    
    • 不推荐写法
    result = a > b ? x = c > d ? c : d : y;
    

    5.4 Init方法

    • 当前构造方法被使用时,它应该返回类型是instancetype而不是id。这样确保编译器正确地推断结果类型。
    @interface Animate
    + (instancetype)animateWithName:(AnimateName)name;
    @end
    

    5.6 CGRect函数

    • 推荐用法
    CGRect frame = self.view.frame;
    
    CGFloat x = CGRectGetMinX(frame);
    CGFloat y = CGRectGetMinY(frame);
    CGFloat width = CGRectGetWidth(frame);
    CGFloat height = CGRectGetHeight(frame);
    

    5.7 黄金路径

    • 当使用条件语句编码时不要嵌套if语句,多个返回语句也是OK。
    • 推荐写法
    - (void)func {
       if (!case) {
          retrun;
      }
        //Do something
    }
    

    5.8 单例模式

    • 单例对象应该使用线程安全模式来创建共享示例。
    + (instancetype)sharedInstance {
      static id sharedInstance = nil;
    
      static dispatch_once_t onceToken;
      dispatch_once(&onceToken, ^{
        sharedInstance = [[self alloc] init];
      });
    
      return sharedInstance;
    }
    

    5.9 布局中的空格

    • 每个方法或者功能块之间为了接口清晰,应当有且仅有一行空格。
    @interface AClass:NSObject
    
    @property (noatomic, strong) UIView *aView
    
    - (void)aMethod;
    
    @end
    
    @implementation AClass
    
    - (void)setAView:(UIView *)aview {
    
    }
    
    - (void)aMethod {
    
    }
    @end
    

    5.10 Getters 和 Setters 放到底部

    • 控制器可能会有非常多的view属性和其他属性,如果所有的getterssetters放到前面,就会导致implementation代码顶部有大量的初始化代码,这就导致了主要的逻辑代码挪后面去了,导致其他人阅读代码不带方便。

    5.11 Delegate要使用弱引用

    • 一个类的Delegate对象通常还引用这类本身,这样很容易造成循环引用问题,所以累的Delegate属性要设置为弱引用

    5.12 属性的线程安全

    • 定义一个属性时,编译器会自动生成线程安全的存取方法(Atomic),但这样会大大降低性能,特别是需要频繁存取的属性来说,是极大的浪费。所以如果定义的属性不需要线程保护,记得手动添加属性关键字nonatomic来取消编译器的优化。

    5.12 点分语法的使用

    • 不要使用点分语法来调用方法,只用来访问属性。这样是为了增加代码的可读性。

    5.13 nil检查

    • 因为在OC中想nil对象发送命令是不会抛出异常或者崩溃的,只是完全的“什么都不做”,所以,要在程序中使用nil来做逻辑上的检查。
      另外,不要使用nil == Object的形式判断。
    //正确方式
    if (!object) {
      //...
    }
    //错误方式
    if (nil == object) {
      //...
    }
    

    相关文章

      网友评论

          本文标题:汇图-iOS开发规范

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