汇图-iOS开发规范

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开发规范)