苹果官方原文: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 宏一样)

通知和异常

通知和异常的命名方式类似,但是他们都有自己的命名模式

通知

通知的命名规范如下:

[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的更多相关文章

  1. 【翻译】苹果官网的命名规范之 Code Naming Basics-General Principles

    苹果官方原文链接:General Principles 代码命名基本原则:通用规范   代码含义清晰 尽可能将代码写的简洁并且明白是最好的,不过代码清晰度不应该因为过度的简洁而受到影响.例如: 代码 ...

  2. 验证Xcode真伪的方法,来自苹果官网

    验证Xcode真伪的方法,来自苹果官网   Xcode的验证你的版本 2015年9月22日    注意:中文为有道翻译,看下验证方法即可.   我们最近将应用程序从应用程序商店,还建有Xcode的假冒 ...

  3. 新型钓鱼手段预警:你看到的 аррӏе.com 真是苹果官网?

    研究人员发现一种"几乎无法检测"的新型钓鱼攻击,就连最细心的网民也难以辨别.黑客可通过利用已知漏洞在 Chrome.Firefox 与 Opera 浏览器中伪造显示合法网站域名(例 ...

  4. 如何在苹果官网下载旧版本的Xcode

    如何在苹果官网下载旧版本的Xcode 前段时间XcodeGhost事件让很多应用中招,不乏一些知名的互联网公司开发的应用.事件的起因是开发者使用了非官方的Xcode,这些Xcode带有xcodegho ...

  5. APP Distribution Guide 苹果官网

    https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/Introduct ...

  6. [WPF] 抄抄超强的苹果官网滚动文字特效实现

    1. 前言 今天 ChokCoco 大佬发布了一篇博客 超强的苹果官网滚动文字特效实现,iPhone 我是买不起的,但不妨碍我对抄特效感兴趣,正好我这周安排的工作已经完成了,于是有空练练手实现了一个 ...

  7. Spring mvc 4系列教程(二)——依赖管理(Dependency Management)和命名规范(Naming Conventions)

    依赖管理(Dependency Management)和命名规范(Naming Conventions) 依赖管理和依赖注入(dependency injection)是有区别的.为了将Spring的 ...

  8. bcache 状态/配置 文件详细介绍(翻译自官网)

    声明: 文中 斜体带下划线  的段落为翻译不够准确的段落 原文:https://www.kernel.org/doc/Documentation/bcache.txt 官网:https://bcach ...

  9. 苹果官网 demo The Elements 阅读随笔

    The Elements https://developer.apple.com/library/ios/samplecode/TheElements/Introduction/Intro.html# ...

随机推荐

  1. oracle 备份恢复篇(四)---rman 单个数据文件

    一,环境背景

  2. 案例40-层与层之间的解耦(面向接口编程)BeanFactory

    1 bean.xml配置文件 <?xml version="1.0" encoding="UTF-8"?> <beans> <!- ...

  3. nodejs日志管理log4js

    常用的2种配置: 1.按文件大小分片,备份若干数量的文件 var log4js = require('log4js'); log4js.configure({ "appenders" ...

  4. TerraBuilder创建地形之去除影像黑边,填充影像

    最近在Skyline项目中使用TerraBuilder创建地形,由于地形比较大,分块下载卫星影像,然后再TerraBuilder中合并,由于合并.图形等等问题,导致创建处理出来的地形中存在严重的缝隙和 ...

  5. DIV滚动样式

    .divScroll{     OVERFLOW:auto;        scrollbar-face-color: #FFFFFF;        scrollbar-shadow-color: ...

  6. LaTeX 修订

    LaTeX多人协同编辑的时候,修订起来与word相比较而言麻烦一些.不过随着技术的发展和需求的增多,会有越来越多的工具支持LaTeX的修订. (1)在线LaTeX ShareLaTeX是一个很优秀的在 ...

  7. Bash 脚本语法

    每次学了忘,忘了学,怎么记不住,因为长时间不用了 Bash 流程控制 循环 for循环 for item in $list do echo $item done 另一种与C语言类似的写法 ; i< ...

  8. scss-@while指令

    @while是一个循环指令,其后跟着一个表达式,如果表达式的返回值为false,则停止循环. scss代码实例如下: $i: 6; @while $i > 0 { .item-#{$i} { w ...

  9. cf547D. Mike and Fish(欧拉回路)

    题意 题目链接 Sol 说实话这题我到现在都不知道咋A的. 考试的时候是对任意相邻点之间连边,然后一分没有 然后改成每两个之间连一条边就A了.. 按说是可以过掉任意坐标上的点都是偶数的数据啊.. #i ...

  10. stroke和fill顺序对绘图的影响

    用canvas绘制线条和填充,fill()和stroke()调用顺序直接影响绘制的结构 先调用stroke在调用fill,绘制的效果看上去lineWidth只绘制出来一半,还以为是个大问题. < ...