iOS 代码规范

114 阅读2分钟

命名清晰性 一致性

t_string (t在这里表示temp)

关键字:  to  for on  with  in  

1.属性定义:

BOOL类型的属性,需要为其getter方法带is前缀。getter方法放在内存管理限定符前面,比如:@property (nonatomic, readonly, getter=isEditable, assign) BOOL editable;

2.实例变量名

下划线开头   比如: _orderLimitsArray

3.公共方法

写一些公共方法时,请尽量使用内联函数或者全局函数而不是宏定义

  • Tips:

  • 函数不通过对象调用,所以不会走OC的消息转发流程,效率远高于方法调用;而且函数会有返回值和参数类型以及参数检查,而这些都是宏定义没有的。

  • 正例: UIKIT_STATIC_INLINE NSString * kNSStringFromInteger(NSInteger a)  { return [NSString stringWithFormat:@"%zd", a]; }

  • 反例: #define kNSStringFromInteger(a) [NSString stringWithFormat:@"%zd", a]

4.私有方法名

私有方法p_开头?

共有方法_开头?

5.全局变量

私有常量

.m文件

static const NSTimeInterval kAnimationDuration = 0.3; 

static NSString *const kErrorMessage = @“ErrorMessage”;

公开常量   在声明公开常量时,也可以使用FOUNDATION_EXPORT替换extern。

.h文件

extern NSTimeInterval WSFPersonModelAnimationDuration; 

extern NSString *WSFPersonModelErrorMessage; 

.m文件

NSTimeInterval WSFPersonModelAnimationDuration = 0.3;

NSString *WSFPersonModelErrorMessage = @“ErrorMessage”;

6.协议名

  代理协议:类名+Delegate。比如:WSFOrderListChangedDelegate。

  数据源协议:类名+DataSource。比如:WSFOrderListDataSource。

  普通协议:类名+Protocol。比如:WSFOrderListVCProtocol。

7.通知

  • 以Notification为后缀
  • 宏定义
  • #define URL_GAIN_QUOTE_LIST @"/v1/quote/list"
  • #define kHomePageDidScroll @"com.xq.home.page.tableview.did.scroll"

8.其他:

头文件中尽量少引用其他头文件,尽量使用@class向前声明,每次引入其他头文件时问问自己是否必须要这样做

[ 建议 ] 尽量不要使用load类方法,如果必须要使用不能在方法内实现复杂逻辑或堵塞线程

[ 建议 ] 尽量减少继承,类的继承尽量不要超过3层,必要时刻可以考虑用分类、协议来代替继承。

UI控件建议使用weak修饰而不是strong修饰。   ??????

addObject****之前要非空判断

禁止在代码中直接写死字符串资源,必须要用字符串ID替代

#pragma mark - Life Cycle

#pragma mark - OverRide

#pragma mark - Intial Methods

#pragma mark - Target Methods

#pragma mark - UITextFieldDelegate

#pragma mark - Setter Getter Methods

#pragma mark - Lazy Load

可以使用代码块快捷键 www.jianshu.com/p/e5609cf43…