iOS开发代码规范(通用)
1. 关于命名
1> 统一要求
含义清楚,尽量做到不需要注释也能了解其作用,若做不到,就加注释
使用全称,不适用缩写
2> 类的命名
- 大驼峰式命名:每个单词的首字母都采用大写字母
例子:MFHomePageViewController
- 后缀要求
ViewController: 使用ViewController做后缀
例子: MFHomeViewController
View: 使用View做后缀
例子: MFAlertView
UITableCell:使用Cell做后缀
例子: MFNewsCell
Protocol: 使用Delegate或者DataSource作为后缀
例子: UITableViewDelegate
UI控件依次类推
3> 私有变量
- 小驼峰式命名:第一个单词以小写字母开始,后面的单词的首字母全部大写
例子:firstName、lastName
- 以 _ 开头,第一个单词首字母小写
例子:NSString * _somePrivateVariable
- 私有变量放在 .m 文件中声明
4> property变量
- 小驼峰式命名
例子:///注释
@property (nonatomic, copy) NSString *userName;
- 禁止使用synthesize关键词
5> 宏命名
- 全部大写,单词间用 _ 分隔。[不带参数]
例子: #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]]
6> Enum
Enum类型的命名与类的命名规则一致
Enum中枚举内容的命名需要以该Enum类型名称开头
例子:
typedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) {
AFNetworkReachabilityStatusUnknown = -,
AFNetworkReachabilityStatusNotReachable = ,
AFNetworkReachabilityStatusReachableViaWWAN = ,
AFNetworkReachabilityStatusReachableViaWiFi =
};
7> Delegate命名
- 类的实例必须为回调方法的参数之一, 如
-(NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section
- 回调方法的参数只有类自己的情况,方法名要符合实际含义, 如:
-(NSInteger)numberOfSectionsInTableView:(UITableView*)tableView
- 以类的名字开头(回调方法存在两个以上参数的情况)以表明此方法是属于哪个类的, 如:
-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
- 使用did和will通知Delegate已经发生的变化或将要发生的变化, 如:
-(NSIndexPath*)tableView:(UITableView*)tableView willSelectRowAtIndexPath:(NSIndexPath*)indexPath;
-(void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath;
2. 私有方法及变量声明
1> 声明位置
在.m文件中最上方,定义空的category进行声明
例子:
#import "CodeStandardViewController.h"
// 在这个category(类目)中定义变量和方法
@interface CodeStandardViewController ()
{ // 声明私有变量
} // 私有方法
- (void)samplePrivateMethod;
@end @implementation CodeStandardViewController
// 私有方法的实现
- (void)samplePrivateMethod
{
//some code
}
3. 关于注释
最好的代码是不需要注释的 尽量通过合理的命名
良好的代码把含义表达清楚 在必要的地方添加注释
注释需要与代码同步更新
如果做不到命名尽量的见名知意的话,就可以适当的添加一些注释或者mark
1> 属性注释
例子:
/// 学生
@property (nonatomic, strong) Student *student;
2> 方法声明注释:
/**
* @brief 登录验证
*
* @param personId 用户名
* @param password 密码
* @param complete 执行完毕的block
*
* @return
*/
+ (void)loginWithPersonId:(NSString *)personId password:(NSString *)password complete:(void (^)(CheckLogon *result))complete;
4. 关于UI布局
使用Interface Builder进行界面布局
Xib文件的命名与其对应的.h文件保持相同
Xib文件中控件的组织结构要合理,Xib文件中控件需要有合理的可读性强的命名,方便他人理解
5. 格式化代码
1> 指针 "*" 位置
定义一个对象时,指针 "*" 靠近变量
例子: NSString *userName;
2> 方法的声明和定义
在 - 、+ 和 返回值 之间留一个空格,方法名和第一个参数之间不留空格
- (id)initWithNibName:(NSString *)nibNameOrNilbundle:(NSBundle *)nibBundleOrNil
{...}
3> 代码缩进
- 使用 xcode 默认缩进,即 tab = 4空格
- 使用 xcode 中 re-indent 功能定期对代码格式进行整理
- 相同类型变量声明需要独行声明
例子:
CGFloatoringX = frame.origin.x;
CGFloatoringY = frame.origin.y;
CGFloatlineWidth = frame.size.width;
- Method与Method之间空一行
例子:
#pragma mark - private methods - (void)samplePrivateMethod
{...} - (void)sampleForIf
{...}
4> 对method进行分组
使用 #pragma mark - 方式对类的方法进行分组
例子:
#pragma mark - private methods - (void)samplePrivateMethod
{...} - (void)sampleForIf
{...} - (void)sampleForWhile
{...}
- (void)sampleForSwitch
{...} - (void)wrongExamples
{...} #pragma mark - public methods
- (void)samplePublicMethodWithParam:(NSString*)sampleParam
{...} #pragma mark - life cycle methods
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{...} - (void)viewDidLoad
{...} - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{...}
5> 大括号写法
- 对于类的method: 左括号另起一行写(遵循苹果官方文档)
例子:
- (id)initWithNibName:(NSString *)nibNameOrNilbundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) {
// Custom initialization
} return self;
}
- 对于其他使用场景: 左括号跟在第一行后边
例子:
- (void)sampleForIf
{
BOOL someCondition = YES;
if(someCondition) {
// do something here
}
}
- (void)sampleForWhile
{
int i = ;
while (i < ) {
// do something here
i = i + ;
}
}
- (void)sampleForSwitch
{
SampleEnum testEnum = SampleEnumTwo;
switch(testEnum) {
caseSampleEnumUndefined:{
// do something
break;
}
caseSampleEnumOne:{
// do something
break;
}
caseSampleEnumTwo:{
// do something
break;
}
default:{
NSLog(@"WARNING: there is an enum type not handled properly!");
break;
}
}
- 任何需要写大括号的部分,不得省略
错误示例:
- (void)wrongExamples
{
BOOLsomeCondition = YES;
if (someCondition)
NSLog(@"this is wrong!!!");
while(someCondition)
NSLog(@"this is wrong!!!");
}
iOS开发代码规范(通用)的更多相关文章
- IOS开发-代码规范
代码风格的重要性对于一个团队和项目来说不言而喻.网上有许多 Objective-C 的代码风格,但这份简洁而又最符合苹果的规范,同时有助于养成良好的代码习惯,也是我们团队一直遵循的代码风格. 写法没有 ...
- iOS开发代码规范
1.关于命名 1.1统一要求 含义清楚, 尽量做到不需要注释也能了解其作用,若做不到,就加注释 使用全称不使用缩写 1.2类的命名 大驼峰式命名:每一个单词的首字母都采用大写字母例子: MFHomeP ...
- Android开发代码规范(转)
Android开发代码规范 1.命名基本原则 在面向对象编程中,对于类,对象,方法,变量等方面的命名是非常有技巧的.比如,大小写的区分,使用不同字母开头等等.但究其本,追其源,在为一个资源其名称 ...
- web前端开发 代码规范 及注意事项
web前端开发 代码规范 及注意事项 外部命名规范 html .js .css文件名称命名规范 my_script.js my_camel_case_name.css my_index.html 路径 ...
- iOS团队代码规范
iOS团队代码规范 工程之始可能需要的工具: 1.使用CocoaPods类库管理工具.CocoaPods安装和使用教程. 2.下载安装注释插件VVDocumenter-Xcode. 一.项目结构管理 ...
- FW开发代码规范---小任性(2)
三.空行 (1)在每个函数.结构体.枚举定义结束之后都要加空行. 在一个函数体内,逻辑密切相关的语句之间不加空行,其它地方应加空行分隔. struct st1 { - }; // 空行 enum { ...
- Web 前端开发代码规范(基础)
一. 引言 对于一个多人团队来说,制定一个统一的规范是必要的,因为个性化的东西无法产生良好的聚合效果,规范化可以提高编码工作效率,使代码保持统一的风格,以便于代码整合和后期维护. 二. HTML/CS ...
- iOS OC开发代码规范
1.变量.类名.函数名 使用驼峰命名法 2.尽量使用完整的单词命名,尽量不采用 缩写单词 3.类名使用大写字母打头,前缀统一加上HH 例如:HHHomePageController 4.类的成员变量使 ...
- iOS - 开发代码部分规范
1. 关于命名 1.1 统一要求 含义清楚,尽量做到不需要注释也能了解其作用,若做不到,就加注释 使用全称,不适用缩写 1.2 类的命名 大驼峰式命名:每个单词的首字母都采用大写字母 例子:MFHom ...
随机推荐
- Mysql之复制选项与监控
1.Slave 筛选选项: --replicate-do-db ,同步复制哪些库 --replicate-ignore-db,忽略哪些库 --replicate-do-table=db_name.t ...
- 2.3顺序容器-deque
deque(双向队列) 1) * :包含deque头文件 ** :deque也是一个可变长数组,适用于vector的操作都适用于deque ***:对比vector的优势在于在头部存取元素可以 ...
- 二、JavaScript语言--JS基础--JavaScript进阶篇--DOM对象 控制HTML元素
1.认识DOM 文档对象模型DOM(Document Object Model)定义访问和处理HTML文档的标准方法.DOM 将HTML文档呈现为带有元素.属性和文本的树结构(节点树). 先来看看下面 ...
- find 查找文件 -exec 然后压缩 查看tar包的内容
[root@cs Downloads]# find ./ -name "banner*" -exec tar -cvf k.tar "{}" \; ./bann ...
- DOM – 7.动态创建DOM + 8.innerText innerHTML value
7.动态创建DOM 8.innerText innerHTML value 7+8 练习:案例:点击按钮动态增加网站列表,分两列,第一列为网站的名字,第二列为带网站超链接的网站名.增加三行常见网站 ...
- Pyqt 获取windows系统中已安装软件列表
开始之前的基础知识 1. 获取软件列表 在Python的标准库中,_winreg可以操作Windows的注册表.获取已经安装的软件列表一般是读去windows的注册表: SOFTWARE\Micros ...
- HTML页面实现返回顶部效果 go to top
1.首先导入jQuery插件. 2.js代码: $(window).scroll(function () { if($(window).scrollTop()>=100) { $(". ...
- IBM AppScan 安全扫描:加密会话(SSL)Cookie 中缺少 Secure 属性 处理办法 分类: 数据安全 2014-06-28 11:35 2805人阅读 评论(0) 收藏
问题描述: 原因分析: 服务器开启了Https时,cookie的Secure属性应设为true: 解决办法: 1.服务器配置Https SSL方式,参考:https://support.micro ...
- QQ互联OAuth
/** * QQ互联 oauth * @author dyllen * */ class Oauth { //取Authorization Code Url const PC_CODE_URL = ' ...
- hdu 1851 尼姆+巴什博弈
先在每堆中进行巴什博弈,然后尼姆 #include<stdio.h> int main() { int T; int i,n; int ans,m,l; scanf("%d&qu ...