命名规范
小驼峰命名法(CamelCase):第一个单词小写字母开头,其他单词首字母大写;
大驼峰命名法(PascalCase): 所有首字母大写。
统一要求:含义清楚,尽量做到不需要看注释也能了解其作用,使用全称,不使用缩写。
1、类的命名
* 大驼峰式命名:每个单词的首字母都采用大写字母, 例子:MFHomePageViewController
* 后缀要求
ViewController: 使用ViewController做后缀
例子: HXHomeViewController
View: 使用View做后缀
例子:HXAlertView
UITableViewCell:使用Cell做后缀
例子: HXNewsTableViewCell
Protocol: 使用Delegate作为后缀
例子: UITableViewDelegate
UI控件依次类推
2、宏命名
* 全部大写,单词间用 _ 分隔。[不带参数]
例子: #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]]
3、Enum
* Enum类型的命名与类的命名规则一致
* Enum中枚举内容的命名需要以该Enum类型名称开头
例子:
typedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) {
AFNetworkReachabilityStatusUnknown = -1,
AFNetworkReachabilityStatusNotReachable = 0,
AFNetworkReachabilityStatusReachableViaWWAN = 1,
AFNetworkReachabilityStatusReachableViaWiFi = 2
};
4、类的成员变量
* 小驼峰式命名:第一个单词以小写字母开始,后面的单词的首字母全部大写
* 以 _ 开头,第一个单词首字母小写
例子:NSString * _somePrivateVariable
* 私有变量放在 .m 文件中声明
5、属性
* 小驼峰式命名
例子:@property (nonatomic, copy) NSString *userName;
UILabel *userNameLabel;
UIButton *userNameButton;
UIImageView *userNameImageView
UIView *userNameView;
6、方法
* 方法名和方法参数遵循相同的规则,使用小写开头的小驼峰法;
* 方法名和参数尽量读起来像是一句话;
* 方法名不允许使用“get“前缀;
* -或+与返回类型间留一个空格,但参数列表之间不要留间隔;
* 如果参数过多,推荐每个参数各占一行;
例如:- (void)doSomethingWithString:(NSString *)theString (NSInteger *)theInteger { ... } ;
书写规范:
1.方法大括号和其他大括号(if/else/switch/while 等.)总是在同一行语句打开但在新行中关闭。
2. 在m文件中对当前类属性进行引用的时候,使用self.property的方式,用以区分局部变量;对属性进行赋值的时候使用“点”赋值,即A.property = value;
3. 使用import引用头文件的工作全部放到 .m 文件中进行,.h文件用到的类型尽量用@class声明,然后在.m里import;
4. 如果m文件中有较多的method,使用 #pragma mark 标记对方法进行分组,便于查看;
在函数分组和protocol/delegate实现中使用#pragma mark -来分类方法,要遵循以下一般结构:
#pragma mark - Lifecycle
- (instancetype)init {}
- (void)dealloc {}
- (void)viewDidLoad {}
- (void)viewWillAppear:(BOOL)animated {}
- (void)didReceiveMemoryWarning {}
#pragma mark - Custom Accessors
- (void)setCustomProperty:(id)value {}
- (id)customProperty {}
#pragma mark - IBActions
- (IBAction)submitData:(id)sender {}
#pragma mark - Public
- (void)publicMethod {}
#pragma mark - Private
- (void)privateMethod {}
#pragma mark - Protocol conformance
#pragma mark - UITextFieldDelegate
#pragma mark - UITableViewDataSource
#pragma mark - UITableViewDelegate
#pragma mark - NSCopying
- (id)copyWithZone:(NSZone *)zone {}
#pragma mark - NSObject
- (NSString *)description {}