• 允许使用较长的描述尽量不要使用缩写,而是将完整的意思写出来。源于代码的维护可能会被不同文化背景的programmer阅读
  • 适当的命名前缀,比如给变量,协议等,不要给方法加前缀
  • 方法命名规则一般以小写字母开头然后中间如果有其他单词第一个首字母大写,比如:fileExistsAtPath:isDirectory: 也有例外的情况,比如使用有名的缩写做前缀TIFFRepresentation (NSImage).
  • 函数和常量的名字以所属类的缩写为前缀然后中间单词首字母大写,比如NSRunAlertPanel  NSCellDisabled
  • 不要给方面前面加下划线做前缀,这样的话此方法就是私有的,但是可以给实例变量加下划线前缀
  • 命名类名时可以加前缀,即之上的prefix并指明这个类的功能
  • 命名协议名一般都是...ing例如:NSLocking Good.  NSLock Poor (seems like a name for a class).

Header Files 命名

  • 声明独立的类或者协议,那么类名就以这个独立的类或者协议名称命名 NSLocale.h  The NSLocale class.
  • 声明相关的类或者协议,如果类,代理或者协议都是相关的一组,就将主要的一个作为命名名字
    NSLock.h NSLocking protocol and NSLock, NSConditionLock, and NSRecursiveLock classes.
    NSString.h NSString and NSMutableString classes.
  • 包含framework的头文件,每一个框架应该有一个头文件。名字是该框架隶属的类名 Foundation.h Foundation.framework.
  • 在一个类中添加的API是属于其他framework的,一个类的category里面命名的方法又包含在其他的framework中时,就在原来类名上加Additions is the NSBundleAdditions.h header file of the Application Kit.
  • 相关的函数和数据类型,如果是相关的函数,常量,数据结构或其他数据类型那么就命名一个合适的名字

Method General Rules 通常规则

  • 以小写字母开头,中间单词首字母大写不要使用前缀,除非是很常用的前缀或者想声明方法为私有的
  • 以动词开头如果方法名称要表示某种行为- (void)invokeWithTarget:(id)target;
  • 在动词前不要加形容词或者副词,不要使用do或者does作为名称的一部分
  • 如果方法直接返回receiver的一个属性,那么就直接后面写这个属性而不需要加get,除非这个方法是间接的返回一个或者多个属性。比如- (NSSize)cellSize;可能直接返回size,那么就不要加get
  • 每一个参数前都要加关键字,即将整个方法连接成完整的一个句子

   - (void)sendAction:(SEL)aSelector to:(id)anObject Right.

  • 每一个关键字要能描述参数

    - (id)viewWithTag:(NSInteger)aTag; Right. - (id)taggedView:(int)aTag; Wrong.

  • 方法中如果描述的是两个或者更多个不同的行为要使用and连接 - (BOOL)openFile:(NSString *)fullPath withApplication:(NSString *)appName andDeactivate:(BOOL)flag;
  • 如果是receiver的多个属性那么不要使用and来连接

     (int)runModalForDirectory:(NSString *)path file:(NSString *)name types:(NSArray *)fileTypes;
   - (int)runModalForDirectory:(NSString *)path andFile:(NSString *)name andTypes:(NSArray *)fileTypes;

Accessor Methods

  • 如果方法是用来返回或者设置对象属性的话,比如get和set方法,那么命名规则是:
  • 如果变量名是名词,那么:- (NSString *)title; 类型+名称 - (void)setTitle:(NSString *)aTitle; void +set+名称首字母大写+类型+a+名称
  • 如果变量名是形容词, 那么:- (NSString *)title; 类型+名称 - (void)setTitle:(NSString *)aTitle; void +set+名称首字母大写+类型+名称
  • 不要将动词和形容词,副词一起混用,例如:

  - (void)setAcceptsGlyphInfo:(BOOL)flag;   Right.
  - (BOOL)acceptsGlyphInfo;                       Right.
  - (void)setGlyphInfoAccepted:(BOOL)flag;  Wrong.
  - (BOOL)glyphInfoAccepted;           Wrong.

  • 可以使用“can”, “should”, “will”, and so on但是不能使用do和does
  • 可以使用get如果方法是多个对象不直接返回,例如:- (void)getLineDash:(float *)pattern count:(int *)count phase:(float *)phase;

Private Methods

  • 不要在方法前仅仅使用下划线来标注这个是私有的方法,苹果保留这个功能,因为很有可能会覆盖系统框架中的私有方法如果名称恰好相同
  • 可以使用自己唯一的标示加下划线来命名私有方法,比如公司名称等 BF_addObject

ios编程规范的更多相关文章

  1. iOS编程规范(整理)

    一.文档结构管理 1.建立Libraries文件夹,所有第三方库放入其中. 2.建立Utilities文件夹,自已封装的类放入其中. 3.建立Constants.h头文件,所有的常量定义于其中.Con ...

  2. iOS扩展——Objective-C开发编程规范

    最近准备开始系统学习一个完整项目的开发流程和思路,在此之前,我们需要对iOS的开发变成规范进行更系统和详尽的学习,随意对编程规范进行了整理和学习.本文内容主要转载自:Objective-C-Codin ...

  3. Batsing的网页编程规范(HTML/CSS/JS/PHP)

    特别注意!!!我这里的前端编程规范不苟同于Bootstrap的前端规范. 因为我和它的目的不同,Bootstrap规范是极简主义,甚至有些没有考虑到兼容性的问题. 我的规范是自己从编程实践中总结出来的 ...

  4. 中兴软件编程规范C/C++

    Q/ZX 深圳市中兴通讯股份有限公司企业标准 (设计技术标准) Q/ZX 04.302.1–2003      软件编程规范C/C++                               20 ...

  5. [置顶] iOS开发规范

    iOS代码编程规范 详细讲解代码该如何写,怎样写,如何规范. 什么样的代码是最美的,本文档会给你讲解 iOS代码编程规范........................................ ...

  6. FangDD Java编程规范

    我们采用<Oracle/Sun原生的Java编程规范>和<Google Java编程规范> Google Java编程风格指南 January 20, 2014 作者:Haws ...

  7. (转)ios 代码规范

    转自http://blog.csdn.net/pjk1129/article/details/45146955 引子 在看下面之前,大家自我检测一下自己写的代码是否规范,代码风格是否过于迥异阅读困难? ...

  8. 国内大型的内部 C# 编程规范

    C#编程规范 改动记录 Ver. No 发版日期 编制人 批准人 改动的说明 目   录 1 1.1 1.2 2 2.1 2.1.1      Pascal 大写和小写 2.1.2      Came ...

  9. JAVA编程规范(下)

    JAVA编程规范(下) 2016-03-27 6. 代码的格式化 6.1 对代码进行格式化时,要达到的目的 1.     通过代码分割成功能块和便于理解的代码段,使代码更容易阅读和理解: 2.     ...

随机推荐

  1. Dsamain

    TechNet 库 Windows Server Windows Server 2008 R2 und Windows Server 2008 Windows Server 命令.参考和工具 Comm ...

  2. 一篇文章看懂Facebook和新浪微博的智能FEED

    本文来自网易云社区 作者:孙镍波 众所周知,新浪微博的首页动态流不像微信朋友圈是按照时间顺序排列的,而是按照一种所谓的"智能排序"的方式.这种违背了用户习惯的排序方式一直被用户骂, ...

  3. Python框架之Django学习笔记(十五)

    表单 从Google的简朴的单个搜索框,到常见的Blog评论提交表单,再到复杂的自定义数据输入接口,HTML表单一直是交互性网站的支柱.本次内容将介绍如何用Django对用户通过表单提交的数据进行访问 ...

  4. mvc-自定义视图引擎

    //自定义视图引擎的实质是把数据模型(moudle)和模板(View)转换成html页面,输出到客户端public class MyView:IView { string _viewPath; pub ...

  5. python 列表、元组 详解

    python中有6种序列的内置类型,分别为:列表,元组,字符串,Unicode字符串,buffer对象和xrange对象 列表和元组是最常见两种类型. 下面将以列表(list)和元组(tuple)为例 ...

  6. PAT1022

    输入两个非负10进制整数A和B(<=230-1),输出A+B的D (1 < D <= 10)进制数. 输入格式: 输入在一行中依次给出3个整数A.B和D. 输出格式: 输出A+B的D ...

  7. poj1386 字符串类型的一笔画问题 欧拉回路

    Play on Words Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 10685   Accepted: 3625 De ...

  8. java实现图的深度优先遍历和广度优先遍

    首先需要知道的是,图的深度优先遍历是一种类似于树的前序遍历方式,即选择一个入口节点,沿着这个节点一直遍历下去,直至所有节点都被访问完毕:如果说,图的深度优先遍历类似于树的前序遍历的话,那么图的广度优先 ...

  9. ELF反调试初探

    ELF反调试初探 http://www.freebuf.com/sectool/83509.html ELF(Executable and Linkable Format)是Unix及类Unix系统下 ...

  10. 论S B的自我修养 【2015/10/18更】

    to do list: 1.正则表达式引擎   (done 2.五子棋AI jquery && canvas 游戏 (这个搞定好多好玩的idea可以实现了php 暂时不想玩各种框架吧, ...