代码规范

一:基本代码命名

1.通用原则

尽量清晰又简洁,无法两全时清晰更重要,可读性优先级更高。

insertObject:atIndex: 好的

insert:at 坏的

removeObject: 好的

remove: 坏的

通常不应缩写名称,即使方法名很长也应完整拼写

destinationSelection   好
destSel 坏

避免一些歧义

displayName 显示一个名字还是展示一个标题

1.2 一致性

尽量和Cocoa编程接口命名一致

当某个类使用了多态的时候,一致性很重要,不同类里,功能相同的方法命名也应相同

-(NSInteger)tag

1.3 避免一些自引用

譬如本身就是某一个类的对象,但是在命名的时候又额外的扩展了

NSStringObject 错误

NSString 正确

但是有些是应该忽略此规则的如Notifaction和Mask

NSUnderlineByWordMask

NSTableViewColumnDidMoveNotifaction

2.前缀

前缀可以防止使用一些第三方库之类的文件发生冲突,一般来说前缀使用大写字母2个到3个不要使用下划线等

命名类、协议、函数、常量和typedef结构体时使用前缀,方法名和结构体不要使用前缀

3.书写规则

在命名API元素时, 使用驼峰命名法(如runTheWordsTogether),并注意以下书写约定:

方法名

小写第一个字母,大写之后所有单词的首字母,不使用前缀

如果方法名以一个众所周知的大写缩略词开始,该规则不适用

fileExistsAtPath:isDirectory:

函数及常量名

使用与其关联类相同的前缀,并大写首字母

NSRunAlertPanel

NSCellDisabled

标点符号

由多个单词组成的名称,别使用标点符号作为名称的一部分

分隔符(下划线、破折号等)也不能使用

避免使用下划线作为私有方法的前缀,Apple保留这一方式的使用

强行使用可能会导致命名冲突,即Apple已有的方法被覆盖,这会导致灾难性后果

实例变量使用下划线作为前缀还是允许的

4.class与protocol命名

类名命名的时候最好包含一个名词,这样可以表明此类是什么,有什么意思

如NSString、NSDate、NSScanner、UIApplication、UIButton

对与protocol类的命名可以加上ing的形式或者以protocol后缀区分

关联class的protocol

一些protoco聚集了一堆无关方法,并试图与某个class关联在一起,由这个class来主导

这种protocol与class同名

如NSObject protocol

5.头文件

可以声明一些宏定义或者常亮或者某一模块的枚举之类的在一个头文件中

二:方法命名

方法要用小写字母开头之后单词大写,如果方法代表接收的动作,以动词开头,不要使用do或者does作为名字一部分,助动词没有实际意义

-(void)invokeWithTarget:(id)target;

-(void)selectTabViewItem:(NSTabViewItem *)tabViewItem

方法返回接收者的属性的时候,要以接收者+接收者属性返回,如果没有返回多个值的话尽量不要加get

-(CGFloat)cellHeight;

确保参数之前的关键字充分描述了参数的意义

-(id)viewWithTag:(NSInteger)tag;

不要使用and链接参数名

如果property表示为名词,格式如下

-(type)noun;

-(void)setNoun:(type)aNoun;

-(BOOL)isAdjective;

delegate 方法

如果有多个参数回调的时候可以在首个参数后面加上对象名字

-(BOOL)tableView:(NSTableView *)tableView shouldSelectRow:(int)row;

使用did或者will通知delegate

-(void)browserDidScroll:(NSBrowser *)sender;

-(NSUndoManager *)windowWillReturnUndoManager:(NSWindow *)window;

询问delegate是否可以执行某个行为时可以使用 did 或 will,不过 should 更完美

-(BOOL)windowShouldClose:(id)sender;

三:属性以及其他命名

1.属性命名

属性命名尽可能的指定是否可读

@property (nonatomic, assign, readonly) BOOL isLogined;

如果属性表示一个名词或者动词的时候

@property (strong) NSString *title;

@property (assign) BOOL showsAlpha;

如果是一个形容词

@property (assign, getter=isEditable) BOOL editable;

枚举常量可以使用苹果 官方风格

typedef enum _NSMatrixMode {
NSRadioModeMatrix = 0,
NSHighlightModeMatrix = 1,
NSListModeMatrix = 2,
NSTrackModeMatrix = 3
} NSMatrixMode;

通知常量命名

通知可以用extern在某个类里边声明,之后再实现的类里边如下引用就行

extern NSString *QCUserDidLogoutNotification;

不可变的常量命名

可以在前边加上static const修饰

static const NSTimeInterval kAnimationDuration = 0.3;

四:缩写

设计编程接口时通常不应使用缩写,被广泛使用的缩写名称除外

五:条件判断

普通if else 判断可以省略 ==YES之类的

if (someObject) { ... }
if (!someObject) { ... } if (someObject == YES) { ...}
if (someObject != nil) { ...}

复杂的逻辑判断可以腾出一个方法专门处理

嵌套判断可以使用如下

if (!user.UserName) return NO;
if (!user.Password) return NO;
if (!user.Email) return NO; return YES;

OC代码规范小记的更多相关文章

  1. OC 代码规范

    我们写出来的代码会给很多人看,为了使代码清晰简洁,方便阅读理解,都会统一遵从一定的代码规范,Objective-C同样如此.   主要参考规范:   1. Google Objective-C Sty ...

  2. iOS代码规范(OC和Swift)

    下面说下iOS的代码规范问题,如果大家觉得还不错,可以直接用到项目中,有不同意见 可以在下面讨论下. 相信很多人工作中最烦的就是代码不规范,命名不规范,曾经见过一个VC里有3个按钮被命名为button ...

  3. iOS-OC命名规范

    IOS开发(OC)中的命名规范 正文:通过读写大量代码我有自己的一套编程思路和习惯,自认为自己的编码习惯还是不错的,代码结构也算清晰,因为我一直以来都是代码看的多写的多,但是总结的比较少,知识经常不成 ...

  4. 学习JavaScript一些资料时,记录一些规范小记

    最近工作不是很忙,所以再深入学学JavaScript,顺便提升一下自己,嘿嘿!主要记录一下学习到的一下编写代码的规范小记吧! 1.声明变量时一定带上var,避免一些错误发生,如变量提升时遇见的问题发生 ...

  5. (转)ios 代码规范

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

  6. iOS团队代码规范

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

  7. 谈谈PHP代码规范

    [转] http://www.syyong.com/php/Talk-about-PHP-code-specification.html 我向往这样一个php世界,里面没有代码规范之争.你我都一样,都 ...

  8. 2016 正确 sublime安装PHPcs PHPcodesniffer代码规范提示插件,修正网上部分不详细描述

    对你有助请点赞,请顶,不好请踩------送人玫瑰,手留余香!-------------------14:37 2016/3/212016 正确 sublime安装PHPcs PHPcodesniff ...

  9. C#与Java对比学习:类型判断、类与接口继承、代码规范与编码习惯、常量定义

    类型判断符号: C#:object a;  if(a is int) { }  用 is 符号判断 Java:object a; if(a instanceof Integer) { } 用 inst ...

随机推荐

  1. Android 项目优化(三):MultiDex 优化

    在整理MultiDex优化之前,先了解一下Apk的编译流程,这样有助于后面针对MultiDex优化. 一.Apk 编译流程 Android Studio 按下编译按钮后发生了什么? 1. 打包资源文件 ...

  2. iOS 和 H5 页面交互(WKWebview 和 UIWebview cookie 设置)

    iOS 和 H5 页面交互(WKWebview 和 UIWebview cookie 设置) 主要记录关于cookie相关的坑 1. UIWebview 1. UIWebview 相对比较简单 直接通 ...

  3. IT兄弟连 HTML5教程 CSS3属性特效 文字排版

    direction定义文字排列方式,所有浏览器都兼容这个属性,有两个可选值rtl和ltr.文字排版的参数说明如表1所示. 表1  CSS3文字排版参数说明 上表所示,ltr是初始值,表示left-to ...

  4. Ansible-下部

    ansible-playbook  playbook是由一个或多个模块组成的,使用多个不同的模块,完成一件事情. ansible软件特点 可以实现批量管理可以实现批量部署ad-hoc(批量执行命令)- ...

  5. CSS(3)---块级标签、行内标签、行内块标签

    块级标签.行内标签.行内块标签 html中的标签元素三种类型:块级标签.行内标签.行内块标签. 一.概述 1.块级标签 概念 每个块元素通常都会独自占据一整行或多整行,可以对其设置宽度.高度.对齐等属 ...

  6. 松软科技web课堂:随机Math.random()

    Math.random() 返回 0(包括) 至 1(不包括) 之间的随机数: 实例 Math.random(); // 返回随机数 JavaScript 随机整数 Math.random() 与 M ...

  7. nginx将http升级到https并且同时支持http和https两种请求、http自动转向https

    1.http升级到https 1.1.检查 Nginx 是否支持 SSL /usr/local/nginx/sbin/nginx -V configure arguments中是否有--with-ht ...

  8. js 回调地狱的另类解决方案尝试

    例如 通过学生获取学生所在学校信息,需要先查询学生所在班级,再通过班级查询所在学校信息.js代码类似写法如下: function getStudentSchool(id) { ajax.get(&qu ...

  9. CSS入门(定位的简单总结)

    一.定位 普通流定位 浮动定位 相对定位 绝对定位 固定定位 二.position定位 1.static(默认值) 2.relative 相对定位 3.absolute 绝对定位 4.fixed 固定 ...

  10. Abusing SUDO Advance for Linux Privilege Escalation

    Index What is SUDO? Scenario. Sudoer FIle Syntax. Exploiting SUDO zip tar strace tcpdump nmap scp ex ...