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开发代码规范(通用)的更多相关文章

  1. IOS开发-代码规范

    代码风格的重要性对于一个团队和项目来说不言而喻.网上有许多 Objective-C 的代码风格,但这份简洁而又最符合苹果的规范,同时有助于养成良好的代码习惯,也是我们团队一直遵循的代码风格. 写法没有 ...

  2. iOS开发代码规范

    1.关于命名 1.1统一要求 含义清楚, 尽量做到不需要注释也能了解其作用,若做不到,就加注释 使用全称不使用缩写 1.2类的命名 大驼峰式命名:每一个单词的首字母都采用大写字母例子: MFHomeP ...

  3. Android开发代码规范(转)

    Android开发代码规范 1.命名基本原则    在面向对象编程中,对于类,对象,方法,变量等方面的命名是非常有技巧的.比如,大小写的区分,使用不同字母开头等等.但究其本,追其源,在为一个资源其名称 ...

  4. web前端开发 代码规范 及注意事项

    web前端开发 代码规范 及注意事项 外部命名规范 html .js .css文件名称命名规范 my_script.js my_camel_case_name.css my_index.html 路径 ...

  5. iOS团队代码规范

    iOS团队代码规范 工程之始可能需要的工具: 1.使用CocoaPods类库管理工具.CocoaPods安装和使用教程. 2.下载安装注释插件VVDocumenter-Xcode. 一.项目结构管理 ...

  6. FW开发代码规范---小任性(2)

    三.空行 (1)在每个函数.结构体.枚举定义结束之后都要加空行. 在一个函数体内,逻辑密切相关的语句之间不加空行,其它地方应加空行分隔. struct st1 { - }; // 空行 enum { ...

  7. Web 前端开发代码规范(基础)

    一. 引言 对于一个多人团队来说,制定一个统一的规范是必要的,因为个性化的东西无法产生良好的聚合效果,规范化可以提高编码工作效率,使代码保持统一的风格,以便于代码整合和后期维护. 二. HTML/CS ...

  8. iOS OC开发代码规范

    1.变量.类名.函数名 使用驼峰命名法 2.尽量使用完整的单词命名,尽量不采用 缩写单词 3.类名使用大写字母打头,前缀统一加上HH 例如:HHHomePageController 4.类的成员变量使 ...

  9. iOS - 开发代码部分规范

    1. 关于命名 1.1 统一要求 含义清楚,尽量做到不需要注释也能了解其作用,若做不到,就加注释 使用全称,不适用缩写 1.2 类的命名 大驼峰式命名:每个单词的首字母都采用大写字母 例子:MFHom ...

随机推荐

  1. ios中通过调试来使用私有api

    转自:http://blog.csdn.net/cubepeng/article/details/11284173 OS不允许使用ios私有api,使用私有api可以获得意想不到的效果 ,同时使用私有 ...

  2. Android Studio 生成Jar包时遇到的gradlew下载问题

    网上介绍说使用gradlew打包jar,可是输入gradlew makeJar后就开始download  XXX.zip,但是等了很久都没有完成.解决办法如下: 原文:http://blog.csdn ...

  3. ASP.NET MVC中的Razor语法

    1.Razor的基本语法 @* 多行代码时需要包含在大括号内{}和每句代码后都需要加分号; *@ @{ ViewBag.Title = "Index"; ViewBag.Name ...

  4. mipi和dsi

    转自: http://blog.csdn.net/longxiaowu/article/details/24410021 一.MIPI MIPI(移动行业处理器接口)是Mobile Industry ...

  5. C# 面试宝典

    1.简述 private. protected. public. internal 修饰符的访问权限. private  私有成员 只有类成员才能访问 protected  保护成员 只有该类及该类的 ...

  6. SSIS Dataflow使用存储过程不能检索列名

    在项目中遇到一个问题,需要在Dataflow中调用一个存储过程,然后把结果生成一个csv文件. 然而在dataflow调用存储过程中遇到了问题,SP不能正确的返回列名. 在SSMT里面明明是可以查出数 ...

  7. .NET Framework 4 与 .NET Framework 4 Client Profile

    今天碰到的一个问题和Client Profile相关的.问题是这样的:一个WPF工程,需要引用另外几个.NET的assembly, 在WPF工程中添加了对这几个assembly的引用,并在程序中可以添 ...

  8. Storyboards

    这里是吐槽时间,换掉了mac默认的输入法,出发点只有一个,就是切换中英文输入的时候相当不爽.也许是习惯了其他各大输入法的一键切换,而又没有找到自带输入法可设置的地方. Segue 以前我们使用navi ...

  9. hdu 1866 几个矩形面积的和 ***

    给出几个矩形,求出面积之和,相交区域只能算一次 一开始想用线段树求个并,后来发现没办法知道并了几次,然后就不会了 看了题解 本题其实很简单,但是想要想到转化也很不容易,因为本题是求面积之和,但是两个矩 ...

  10. web开发的步骤

    前端知道是浏览器呈现的部分,相对于前端,后台你可以理解为服务器端专门处理.读取.存储数据库数据的部分. 因为网站是基于B\S架构,即浏览器---服务端架构,就程序来讲,可笼统划分为前端程序和服务器端程 ...