代码规范

一:基本代码命名

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. CentOS 7上的主机名设置和基本网络管理

    主机名 CentOS 6 查看. # hostname 设置. # hostname NEW_NAME 设置完成后,xshell的会话中不会显示NEW_NAME,可通过重新登录会话来显示.不过实际上我 ...

  2. CSS 利用 `padding-bottom` 实现固定比例的容器

    复用 padding-bottom 可实现一块区域在窗口尺寸变化使始终保持自适应.对于响应式布局中的图片或视频来说比较有用. <div style="width: 100%; posi ...

  3. IDEA中使用Maven模板创建Servelet项目并使用Tomcat来运行项目

    首先需要正确安装Maven和Tomact,Maven安装和Tomact安装步骤,参见别的文章. 一.创建Maven工作空间 点击Finish按钮后,耐心等待.直到出现BUILD SUCCESS为止. ...

  4. Change Style of Navigation Items 更改导航项的样式

    In this lesson, you will learn how to change the style of navigation items in a WinForms XAF applica ...

  5. 基于webpack实现多html页面开发框架七 引入第三方库如jquery

    一.解决什么问题 1.如何引入第三方库,如jquery等 二.引入jquery方法 1.下载jquery.min.js放到assets/lib下面 2.安装copy-webpack-plugin,将已 ...

  6. 微信小程序连接低功率蓝牙控制单片机上硬件设备

    1.软件部分介绍 微信小程序是一种新的应用,用户不需要下载应用只用通过扫二维码或者打开链接就能使用,使用完后不需要卸载,直接关闭就行了.微信在2017年初推出微信小程序开发环境.任何企业,媒体,个人都 ...

  7. diango运行流程

    diango运行流程 Django处理一个请求的流程: 在浏览器的地址栏中输入地址,回车,发了一个GET请求 wsgi模块接收了请求,将请求的相关信息封装成request对象 根据地址找到对应函数 执 ...

  8. 使用Apollo动态修改线上数据源

    前言 最近需要实现一个功能,动态刷新线上数据源环境,下面来使用Apollo配置中心和Spring提供的AbstractRoutingDataSource来实现. 具体实现 Apollo是携程开源的统一 ...

  9. Python 获取MD5加密值

    Python 获取MD5加密值方法封装 import hashlib def get_md5(s): """获取MD5加密值 :param s: 需要加密的字符串 :re ...

  10. RTP Payload Format for H264 Video

    基础传输结构 rtp中对于h264数据的存储分为两层,分别是 VCL: video coding layer 视频编码层 这是h264中block, macro block 以及 slice级别的定义 ...