苹果官方原文: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. 企业的VI设计需要包含哪些元素

    VI设计,即视觉识别系统,企业VI设计是企业品牌建设的重中之重.最近很多人都在问,一套完整的企业VI设计都包括哪些内容?现在我们站在一个高级设计师的角度,来简单谈一谈VI设计包括哪些内容.文中指出,一 ...

  2. nodejs日志管理log4js

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

  3. Android中的ListView点击时的背景颜色设置

    想设置listview中每行在点击.选中等不同状态下有不同的背景颜色,或者背景图片. 这可以用Android的Selector来实现.它可以定义组件在不同状态下的显示方式. 新建一个xml文件list ...

  4. lua输入函数名字符串执行函数

    str = "testA()"loadstring(str)() function testA() ------end 使用loadstring即可执行后面在xlua用了下发现不能 ...

  5. 【Unity】工具类系列教程—— 代码自动化生成!

    转载自:https://zhuanlan.zhihu.com/p/30716595?utm_medium=social&utm_source=qq [为什么要做自动化工具] 工具类的创建是为了 ...

  6. java使用netty的模型总结

    一 由于本人的码云太多太乱了,于是决定一个一个的整合到一个springboot项目里面. 附上自己的github项目地址 https://github.com/247292980/spring-boo ...

  7. 修改Linux时区的2种办法

    由于Azure 上所有的服务时间都采用了 UTC 时间.UTC 时间比中国时间晚 8 个小时,该如何按照自己的需要来进行修改呢,下面提供2种办法以供参考: 1.修改 /etc/localtime 文件 ...

  8. Angular6路由复用与延迟加载的冲突解决——看看有备无患

    结论:   结论放最上面,送给匆匆查资料的你: 同时使用延迟加载 + 路由复用,一定不能使用route.routeConfig.path做key去缓存,否则会死得难看. 经实测(我没有完全去解读源代码 ...

  9. python学习(六)--正则的一些例子

    import re #正则表达式#compile函数,--将正则表达式转变为内部函数,提高执行效率strr = "python123456"pattern = "Pyth ...

  10. 洛谷P2312 解方程(暴力)

    题意 题目链接 Sol 出这种题会被婊死的吧... 首先不难想到暴力判断,然后发现连读入都是个问题. 对于\(a[i]\)取模之后再判断就行了.注意判断可能会出现误差,可以多找几个模数 #includ ...