【翻译】苹果官网的命名规范之 Naming Properties and Data Types
苹果官方原文:Naming Properties and Data Types
前言:纯属练习英语和学习。翻译错误和不通顺的地方敬请谅解和指正。O(∩_∩)O
属性和数据类型的命名
本节讲述了属性定义、变量、常量、通知和异常的常用命名规范。
l 定义属性和变量
一个属性定义会影响该属性的访问方法的定义。所以属性的命名规范大体上和访问器(getter,setter)的命名规范是一致的。如果一个属性是表达一个名词或者动词,那么定义如下:
@property(…) type nounOrVerb
例如:
@property(strong) NSString *title; @property(assign) BOOL showsAlpha;
如果一个属性名称为一个形容词,例如可编辑的(editable),通常忽略is 前缀,但是需要为get访问器添加惯用的命名,即isEditable,例如:
@property(assign,getter=isEditable) BOOL editable;
在许多情况下,当你声明了一个属性并且同时合成了一个对应的实例变量。确保该实例变量精确的描述了该属性的含义。通常,你最好不要直接访问变量,你需要使用访问器去访问该变量。(你可以在init和dealloc方法内直接访问变量)。一般给实例变量添加一个下划线做前缀来表明该变量。例如:
@implementation MyClass{
BOOL _showsTitle;
}
如果你通过定义属性来合成一个变量,在@synthesize中为它指定一个变量名称
@implementation MyClass @synthesize showsTitle =_showsTitle;
当你为一个类添加变量的时候,你需要在脑海中注意以下几点:
1.避免显示的定义一个公共的变量,开发者应该关心一个接口而不是关注一个接口如何存储的数据细节。你可以通过声明属性并且合成相对应的变量的方式来避免直接定义变量。
2.如果你需要(在接口)定义一个变量,最好加上 @private 或者 @protected,如果你希望自己的类被继承,继承的类需要直接访问该变量获取数据,那么用@protected 指令
3.如果一个变量是可访问的。确保你写了该变量访问方法。(如果可能的话,定义属性吧,@property 会自动生成 getter setter方法)
l 常量
常量的命名规则通常取决于该常量的创建方式。
枚举类型的常量
用枚举来实现一组相关连的integer类型的常量。
枚举常量的定义命名方式遵循 functions命名规范。下面看一个NSMatrix.h中 的例子:
typedef enum _NSMatrixMode {
NSRadioModeMatrix = ,
NSHighlightModeMatrix = ,
NSListModeMatrix = ,
NSTrackModeMatrix =
} NSMatrixMode;
注意 typedef 是可以省略的,你可以创建一个没有命名的枚举,例如:
enum {
NSBorderlessWindowMask = ,
NSTitledWindowMask = << ,
NSClosableWindowMask = << ,
NSMiniaturizableWindowMask = << ,
NSResizableWindowMask = <<
};
用const创建常量
可以用const 创建一个float类型的常量。同样也可以创建一个integer类型的常量,如果它和其他常量不相关的话。否则,还是用枚举吧。用const定义常量的方式如下:
const float NSLightGray;
命名规则同枚举命名规则一样。
其他类型的常量
一般而言,不要用#define 预处理命令创建常量。对于integer类型的常量,用枚举,对于float类型的常量用const定义。
使用大写字母符号的预处理指令来确定一段代码是否要执行,例如:
#ifdef DEBUG
注意由系统定义的宏处理指令前后都有两个下划线,例如:
__MACH__
定义用于通知或者字典的key的string类型的常量,你能确保编译器能够识别准确的值。(它执行拼写检查)Cocoa framework提供了很多范例:
APPKIT_EXTERN NSString *NSPrintCopies;
实际上常量是在.m 文件里面给赋值的。(注意APPKIT_EXTERN 宏同object-C的extern 宏一样)
l 通知和异常
通知和异常的命名方式类似,但是他们都有自己的命名模式
通知
通知的命名规范如下:
[Name of associated class] + [Did | Will] + [UniquePartOfName] + Notification
例如:
NSApplicationDidBecomeActiveNotification
NSWindowDidMiniaturizeNotification
NSTextViewDidChangeSelectionNotification
NSColorPanelColorDidChangeNotification
异常的命名规范如下:
[Prefix] + [UniquePartOfName] + Exception
例如:
NSColorListIOException
NSColorListNotEditableException
NSDraggingException
NSFontUnavailableException
NSIllegalSelectorException
要注意 uniquePart 部分要使用驼峰命名法哦
备注:各个单词示意
conventions 规范,约定
property 属性
instance 实例
variable 变量
constants 常量
notification 通知
exception 异常
accessor 访问器
omits 忽略
explicitly 明确
vary 不同
【翻译】苹果官网的命名规范之 Naming Properties and Data Types的更多相关文章
- 【翻译】苹果官网的命名规范之 Code Naming Basics-General Principles
苹果官方原文链接:General Principles 代码命名基本原则:通用规范 代码含义清晰 尽可能将代码写的简洁并且明白是最好的,不过代码清晰度不应该因为过度的简洁而受到影响.例如: 代码 ...
- 验证Xcode真伪的方法,来自苹果官网
验证Xcode真伪的方法,来自苹果官网 Xcode的验证你的版本 2015年9月22日 注意:中文为有道翻译,看下验证方法即可. 我们最近将应用程序从应用程序商店,还建有Xcode的假冒 ...
- 新型钓鱼手段预警:你看到的 аррӏе.com 真是苹果官网?
研究人员发现一种"几乎无法检测"的新型钓鱼攻击,就连最细心的网民也难以辨别.黑客可通过利用已知漏洞在 Chrome.Firefox 与 Opera 浏览器中伪造显示合法网站域名(例 ...
- 如何在苹果官网下载旧版本的Xcode
如何在苹果官网下载旧版本的Xcode 前段时间XcodeGhost事件让很多应用中招,不乏一些知名的互联网公司开发的应用.事件的起因是开发者使用了非官方的Xcode,这些Xcode带有xcodegho ...
- APP Distribution Guide 苹果官网
https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/Introduct ...
- [WPF] 抄抄超强的苹果官网滚动文字特效实现
1. 前言 今天 ChokCoco 大佬发布了一篇博客 超强的苹果官网滚动文字特效实现,iPhone 我是买不起的,但不妨碍我对抄特效感兴趣,正好我这周安排的工作已经完成了,于是有空练练手实现了一个 ...
- Spring mvc 4系列教程(二)——依赖管理(Dependency Management)和命名规范(Naming Conventions)
依赖管理(Dependency Management)和命名规范(Naming Conventions) 依赖管理和依赖注入(dependency injection)是有区别的.为了将Spring的 ...
- bcache 状态/配置 文件详细介绍(翻译自官网)
声明: 文中 斜体带下划线 的段落为翻译不够准确的段落 原文:https://www.kernel.org/doc/Documentation/bcache.txt 官网:https://bcach ...
- 苹果官网 demo The Elements 阅读随笔
The Elements https://developer.apple.com/library/ios/samplecode/TheElements/Introduction/Intro.html# ...
随机推荐
- Jquery EasyUI Treegrid按需加载子集
项目说明,要一个有权限并且按需加载的树形列表. jeasyui网址 CSS <!--添加树状控件--> <link rel="stylesheet" type=& ...
- Oracle中查询关键字select--from--where--group by--having--order by执行顺序
select--from--where--group by--having--order by 这6个查询关键字的执行顺序: 1.from组装来自不同数据源的数据:2.where基于指定的条件对记录行 ...
- 聚焦游戏安全,腾讯云GAME-TECH“空降”上海
游戏行业是DDoS攻击高发行业,占DDoS攻击的六成以上,特别是近年来游戏行业的爆发式增长,游戏行业更成为了黑产.外挂.非法信息的聚集地.安全,已然成为游戏行业当前最大的敌人. 6月29日,腾讯云GA ...
- hdu 2845——Beans——————【dp】
Beans Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- D3(v5) in TypeScript 坐标轴之 scaleBand用法
在学习d3时候,发现在TS中实现D3的坐标轴中遇到一些错误,而这些错误却不会存在于js(因为ts的类型检查)写法中,因此做下笔记: import * as d3 from 'd3';import * ...
- C++程序设计基础(1)程序的编译和执行
注:读<程序员面试笔记>笔记总结 1.编译执行过程 1.1预处理: (1)所有以#开头的代码都属于预处理的范畴:#include,#define,#ifdef(#ifndef,#endif ...
- continue break return
ontinue: 可以让程序跳过,continue关键字之后的语句,回到while循环的第一行命令 break: 让程序完全跳出循环,结束while循环的执行 return: 从查询或过程中无条件退出 ...
- 关于“System.Data.ProviderIncompatibleException”类型的异常
作为刚学习MVC的菜鸟,因为平常的不努力学习.看书,所以只能参考官方的教程学习操作新手入门 一步一步认真的做,前天晚上出现了一个关于数据库连接字符串错误的问题,自己查了很多资料, 问了许多大神,他们的 ...
- [转]谷歌Chrome浏览器开发者工具教程—基础功能篇
来源:http://www.xiazaiba.com/jiaocheng/5557.html Chrome(F12开发者工具)是非常实用的开发辅助工具,对于前端开发者简直就是神器,但苦于开发者工具是英 ...
- JavaScript typeof运算符和数据类型
// js有6种数据类型:Undefined.Null.Boolean.String.Number.Object //(01)typeof console.log(typeof undefined); ...