zoukankan      html  css  js  c++  java
  • 【翻译】苹果官网的命名规范之 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           = 0,
        NSHighlightModeMatrix       = 1,
        NSListModeMatrix            = 2,
        NSTrackModeMatrix           = 3
    } NSMatrixMode;

    注意 typedef 是可以省略的,你可以创建一个没有命名的枚举,例如:

    enum {
        NSBorderlessWindowMask      = 0,
        NSTitledWindowMask          = 1 << 0,
        NSClosableWindowMask        = 1 << 1,
        NSMiniaturizableWindowMask  = 1 << 2,
        NSResizableWindowMask       = 1 << 3
     
    };

    用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 不同

  • 相关阅读:
    Token的生成和检验
    MD5和SHA加密实现
    服务器读取客户端数据
    服务器上传和下载文件
    NOI模拟题4 Problem B: 小狐狸(fox)
    NOI模拟题4 Problem A: 生成树(mst)
    混凝土数学第四章之数论学习笔记
    混凝土数学第二章和式之有限微积分 ( 离散微积分 ) 学习笔记
    网络流相关学习笔记
    NOI模拟题1 Problem A: sub
  • 原文地址:https://www.cnblogs.com/panzi/p/5284663.html
Copyright © 2011-2022 走看看