OC代码规范小记
代码规范
一:基本代码命名
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代码规范小记的更多相关文章
- OC 代码规范
我们写出来的代码会给很多人看,为了使代码清晰简洁,方便阅读理解,都会统一遵从一定的代码规范,Objective-C同样如此. 主要参考规范: 1. Google Objective-C Sty ...
- iOS代码规范(OC和Swift)
下面说下iOS的代码规范问题,如果大家觉得还不错,可以直接用到项目中,有不同意见 可以在下面讨论下. 相信很多人工作中最烦的就是代码不规范,命名不规范,曾经见过一个VC里有3个按钮被命名为button ...
- iOS-OC命名规范
IOS开发(OC)中的命名规范 正文:通过读写大量代码我有自己的一套编程思路和习惯,自认为自己的编码习惯还是不错的,代码结构也算清晰,因为我一直以来都是代码看的多写的多,但是总结的比较少,知识经常不成 ...
- 学习JavaScript一些资料时,记录一些规范小记
最近工作不是很忙,所以再深入学学JavaScript,顺便提升一下自己,嘿嘿!主要记录一下学习到的一下编写代码的规范小记吧! 1.声明变量时一定带上var,避免一些错误发生,如变量提升时遇见的问题发生 ...
- (转)ios 代码规范
转自http://blog.csdn.net/pjk1129/article/details/45146955 引子 在看下面之前,大家自我检测一下自己写的代码是否规范,代码风格是否过于迥异阅读困难? ...
- iOS团队代码规范
iOS团队代码规范 工程之始可能需要的工具: 1.使用CocoaPods类库管理工具.CocoaPods安装和使用教程. 2.下载安装注释插件VVDocumenter-Xcode. 一.项目结构管理 ...
- 谈谈PHP代码规范
[转] http://www.syyong.com/php/Talk-about-PHP-code-specification.html 我向往这样一个php世界,里面没有代码规范之争.你我都一样,都 ...
- 2016 正确 sublime安装PHPcs PHPcodesniffer代码规范提示插件,修正网上部分不详细描述
对你有助请点赞,请顶,不好请踩------送人玫瑰,手留余香!-------------------14:37 2016/3/212016 正确 sublime安装PHPcs PHPcodesniff ...
- C#与Java对比学习:类型判断、类与接口继承、代码规范与编码习惯、常量定义
类型判断符号: C#:object a; if(a is int) { } 用 is 符号判断 Java:object a; if(a instanceof Integer) { } 用 inst ...
随机推荐
- git 本地代码 切换远程分支
公司之前代码使用的是gitlab,后来换成腾讯的工峰,所以需要切换远程不支,所以在原代码上切换即可. 在原项目打开git bash命令,打开后会显示本地的原始分支 打开后 添加新的远程分支,红色字体为 ...
- Mapbox轨迹回放
轨迹回放是webgis中的常见功能,是一种被客户喜闻乐见的GIS动画. 动画是一种短时间内不停重绘达到不断运动的效果.本文中轨迹回放就是事先计算好所需要的点,后面再进行播放. ...
- 初级模拟电路:4-3 BJT晶体管的交流建模
回到目录 1. 四种BJT模型概述 对BJT晶体管建模的基本思路就是,用电路原理中的五大基本元件(电阻.电容.电感.电源.受控源)构建一个电路,使其在一定工作条件下能等效非线性半导体器件的实际工作.一 ...
- 第1章:C++泛型技术基础:模板——《C++泛型:STL原理和应用》读书笔记整理
第1章:C++泛型技术基础:模板 1.2 关于模板参数 1.2.1 模板参数类型 类型参数 typename声明的参数都属于类型参数,它的实参必须为系统内置或者用户自定义的数据类型,包括类模板实体 ...
- python高阶函数—filter
python内置了一个filter函数,用于过滤序列.和map函数类似,filter()函数也接受一个函数和一个序列.只不过filter函数中是把函数依次作用于序列中的每一个元素,如果是True则保留 ...
- Consul初探-集成ocelot
前言 由于 Consul 的高可用性.丰富的API.友好的 Web 控制台界面等特点,Consul 的发展非常迅猛,得益于 .NETCore 社区的快速发展和社区成员的贡献,我们现在可以非常方便快速的 ...
- JavaScript 标准内置对象Promise使用学习总结
Javascript标准内置对象Promise使用学习总结 by:授客 QQ:1033553122 1. 基础用法 var condition = true; let p = new Prom ...
- vue-better-scroll实现移动端下拉加载组件
1.下载安装better-scroll npm i -S better-scroll 1.1安装完成之后,打开pacaage.json文件查看,是否有(better-scroll) "dep ...
- Cesium专栏-卫星轨迹
Cesium Cesium 是一款面向三维地球和地图的,世界级的JavaScript开源产品.它提供了基于JavaScript语言的开发包,方便用户快速搭建一款零插件的虚拟地球Web应用,并在性能,精 ...
- std::map自定义类型key
故事背景:最近的需求需要把一个结构体struct作为map的key,时间time作为value,定义:std::map<struct, time> _mapTest; 技术调研:众所周知, ...