• 允许使用较长的描述尽量不要使用缩写,而是将完整的意思写出来。源于代码的维护可能会被不同文化背景的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. This application has request the Runtime to terminate it in an unusual way.

    Q: CertsMV.exe  gui popup two dialogs as follow. A: 测试发现是分配内存导致,频繁分配内存(大约6M) 可能是堆管理导致 分配大内存分配失败,程序未对 ...

  2. 7、JavaScript 知识总结

    1.JavaScript的作用 ①JavaScript 为 HTML 设计师提供了一种编程工具 ②JavaScript 可以将动态的文本放入 HTML 页面 ③JavaScript 可以对事件作出响应 ...

  3. ROM+VGA 图片显示

    内容 1.将一幅图片制成mif文件,初始化rom,图片像素为 120 * 60 2.驱动VGA,将图片显示在屏幕上 1.VGA 时序 下面是我的笔记截图,感觉更好理解. 2.640*480 60hz ...

  4. Leetcode 525.连续数组

    连续数组 给定一个二进制数组, 找到含有相同数量的 0 和 1 的最长连续子数组. 示例 1: 输入: [0,1] 输出: 2 说明: [0, 1] 是具有相同数量0和1的最长连续子数组. 示例 2: ...

  5. [oldboy-django][2深入django]老师管理 -- form表单如何生成多选框标签,多选框的默认值显示,以及多选框数据插入到数据库,多选框数据更改到数据库

    1 form表单如何生成多选框(包含了多选框可选择内容) - Form设置班级输入框为 select多选 - 多选 class TeacherForm(Form): name = fields.Cha ...

  6. 链表的问题,ListNode问题

    算法面试,有关ListNode的问题 class ListNode{ ListNode *next; int val; ListNode(int x): val(x){}}; 在面试的时候,怎么快速想 ...

  7. [c++基础]3/5原则--拷贝构造函数+拷贝赋值操作符

    /* * main.cpp * * Created on: Apr 7, 2016 * Author: lizhen */ #include <iostream> #include &qu ...

  8. leetcode NO.7 反转整数 (python实现)

    来源 https://leetcode-cn.com/problems/reverse-integer/description/ 题目描述 给定一个 32 位有符号整数,将整数中的数字进行反转. 示例 ...

  9. 删除 node 【笔记】

    sudo npm uninstall npm -g sudo rm -rf /usr/local/lib/node /usr/local/lib/node_modules /var/db/receip ...

  10. js判断时间是否过期

    var myDate=new Date(); myDate.setFullYear(2014,2,1); //2014年3月1日 //注意:表示月份的参数介于 0 到 11 之间.也就是说,如果希望把 ...