一、文件分类
在相应的模块下建立文件夹,
所有ViewController都放在ViewController文件夹下,所有的View放在view文件夹下,所有model放在model文件夹下,Category放在Category文件夹下,功能型类放在Tools文件夹下,数据库或CoreData操作放在DAO文件夹下。
二、命名规则
1、含义清楚,尽量做到不需要注释也能了解其作用,若做不到,就加注释
2、使用全称,不适用缩写
3、文件名使用:大驼峰法+后缀 eg:CreateNoteViewController、NoteListCell、NoteDetailView等(首字母大写),在文件顶部的注释中简要说明该类的作用或页面名称。
4、文件名后缀ViewController: 使用ViewController做后缀eg: MFHomeViewController、View: 使用View做后缀 eg: MFAlertView 、 UITableCell:使用Cell做后缀 eg: MFNewsCell、 Protocol: 使用Delegate或者DataSource作为后缀 eg: UITableViewDelegate、UITableViewDataSource UI控件依次类推
5、私有变量、property变量命名要用小驼峰法(首字母小写),要体现出该变量和函数的意义。私有变量放在 .m 文件中声明
6、宏命名
全部大写,单词间用 _ 分隔。[不带参数]
eg: #define THIS_IS_AN_MACRO @"THIS_IS_AN_MACRO"
以字母 k 开头,后面遵循大驼峰命名。[不带参数]
eg:#define kWidth self.frame.size.width
小驼峰命名。[带参数]
#define testMyCondition(condition) (condition*5)
7、Enum
Enum类型的命名用大驼峰法
Enum中枚举内容的命名需要以该Enum类型名称开头
eg:
1 typedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) {
2 AFNetworkReachabilityStatusUnknown= -1,
3 AFNetworkReachabilityStatusNotReachable = 0,
4 AFNetworkReachabilityStatusReachableViaWWAN = 1,
5 AFNetworkReachabilityStatusReachableViaWiFi = 2
6 };
8、Delegate命名
类的实例必须为回调方法的参数之一, 如
-(NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section
回调方法的参数只有类自己的情况,方法名要符合实际含义, 如:
-(NSInteger)numberOfSectionsInTableView:(UITableView*)tableView
以类的名字开头(回调方法存在两个以上参数的情况)以表明此方法是属于哪个类的, 如:
-(UITableViewCell*)tableView:(UITableView*)tableViewcellForRowAtIndexPath:(NSIndexPath *)indexPath
使用did和will通知Delegate已经发生的变化或将要发生的变化, 如:
-(NSIndexPath*)tableView:(UITableView*)tableView willSelectRowAtIndexPath:(NSIndexPath*)indexPath;
-(void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath;
9、私有方法及变量声明
变量声明在.m文件中最上方的扩展的花括号中
eg:
方法和属性声明在花括号外
三、注释
1、合理的命名的简单函数可以不需要注释
2、注释需要与代码同步更新
3、在代码量较大逻辑较复杂的函数前要用标准注释对函数进行注释如下标准文档注释(光标放在函数名前组合键“option+command+\”调出)
/**
函数功能描述
@param message 参数描述
@param view 参数描述
@return 返回类型描述
*/
4、在较为复杂的ViewController中会涉及到较多函数和代理方法的实现,为了便于阅读和修改要在模块最上面加上
将函数分组
#pragma mark 模块描述信息。
比如要将接口调用的方法放在一起、tableView的代理方法、DataSource方法的实现放在一起,viewcontroller的viewdidload、 viewWillApear等生命周期函数放在一起。
5、属性注释示例
/// 学生
@property (nonatomic, strong) Student *student;
四、UI布局文件
如果使用InterfaceBuilder或Storyboard进行界面布局
1、Xib文件的命名与其对应的.h文件保持相同
2、Xib文件中控件的组织结构要合理,Xib文件中控件需要有合理的可读性强的命名,方便他人理解;
3、文件的ID要和类名一致如LoginViewcontroller.m 对应的LoginViewcontroller.xib的ID应为“LoginViewcontroller”
五、格式化代码
1、指针 "*" 位置:定义一个对象时,指针 "*" 靠近变量,eg:NSString *userName;
2、方法的声明和定义:在 - 、+ 和返回值之间留一个空格,方法名和第一个参数之间不留空格;
3、代码缩进
使用xcode 默认缩进,即 tab = 4空格
使用xcode 中 re-indent 功能定期对代码格式进行整理
4、相同类型变量声明需要独行声明
例子:
CGFloat oringX =frame.origin.x;
CGFloat oringY =frame.origin.y;
CGFloat lineWidth =frame.size.width;
5、Method与Method之间空一行
6、大括号写法
对于类中的method:左括号另起一行写(遵循苹果官方文档)
method中可以不另起一行
其他使用场景: 左括号跟在第一行后边
任何需要写大括号的部分,不得省略,例如在if-else语句中就算只有一行代码也要用大括号括起来。
六、扩展和修改功能原则
之前写好并测试通过的类如果不是修改bug或者页面如果需要添加方法请使用Category、如果需要添加属性请使用继承,原则就是不破坏已经测试完成的代码。
参考:http://www.cnblogs.com/gfxxbk/p/5469017.html