您的当前位置:首页正文

苹果编码规范(3)

来源:花图问答

                                                                    --:我们是要偷那条船吗?

                                                                    --:征用,是征用。航海术语,懂吗?

                                                                                        ----------《加勒比海盗》

函数命名

1函数命名的格式与方法命名的格式一样,但是有两点例外:

      函数以类和常量相同的前缀开始。

      前缀之后的单词的第一个字母大写。

2多数函数以一个描述该函数行为的动词开头:

NSHighlightRect

NSDeallocateObject

3如果函数返回它第一个参数,则忽略动词

unsigned int NSEventMaskFromType(NSEventType type)

float NSHeight(NSRect aRect)

4如果值是以传址的方式返回,使用“get”

const char *NSGetSizeAndAlignment(const char *typePtr, unsigned int *sizep, unsigned int *alignp)

5如果返回值是布尔值,则函数以相应的动词的变化形式返回。

BOOL NSDecimalIsNotANumber(const NSDecimal *decimal)

属性和数据类型命名

属性和实例变量

属性的命名与获取方法的命名大致相同。如果属性是动词或名词,格式如下:@property (…)类型  动词或名词;

@property (strong) NSString *title;

@property (assign) BOOL showsAlpha;

如果属性是形容词,则属性名忽略“is”前缀,而get方法使用“is”前缀

@property (assign, getter=isEditable) BOOL editable;

确保实例变量的名字能简洁明了地描述它保存的属性(attribute)。通常,你应该直接获取实例变量,而应该通过获取方法来获取。为了标记这一点,使用下划线作为实例变量的前缀。如:

@implementation MyClass {

BOOL _showsTitle;

}

避免显式地声明public的实例变量

如果你需要声明一个实例变量,使用@privateor或protected。

如果该类的实例能够获取该实例变量,确保你为该实例变量写了获取方法。

常量

枚举型常量

为那些具有integer值的相关常量使用枚举型常量。

枚举常量的命名规则与函数的命名规则相同

typedef enum _NSMatrixMode {

NSRadioModeMatrix          = 0,

NSHighlightModeMatrix      = 1,

NSListModeMatrix            = 2,

NSTrackModeMatrix          = 3

} NSMatrixMode;

可以给bit masks这样的值创建未命名的枚举常量:

enum {

NSBorderlessWindowMask      = 0,

NSTitledWindowMask          = 1 << 0,

NSClosableWindowMask        = 1 << 1,

NSMiniaturizableWindowMask  = 1 << 2,

NSResizableWindowMask      = 1 << 3

};

用const创建的常量

用const创建浮点常量。如果一个integer的常量与其他常量没有关联,可以使用const来创建,否则使用枚举。

用const来创建常量的格式如下:

const float NSLightGray;

和枚举常量一样,用const创建的常量的命名规则同方法命名。

其他类型的常量

通常来说,不要用#define来声明常量。对于integer类型,使用枚举,浮点型,用const。

使用大写字母来定义符号,预处理器由此来判断一个代码块是否被执行。比如:

#ifdef DEBUG

编译器定义的宏前后都有两个下划线。如:

__MACH__

APPKIT_EXTERN NSString *NSPrintCopies;

通知和异常

通知和异常的命名规则相似,但又各有不同。

通知

如果一个类有一个代理,它的大多数通知都会被它的代理通过已定义的方法接收。这些通知的名字应该反应相对应的代理方法。比如,全局NSApplication的代理自动的接收applicationDidBecomeActive:消息,不管应用什么时候抛出NSApplicationDidBecomeActiveNotification 通知。

通知的名字格式如下:

[相关类名] + [Did | Will] + [名字的特有部分] + Notification

比如:

NSApplicationDidBecomeActiveNotification

NSWindowDidMiniaturizeNotification

NSTextViewDidChangeSelectionNotification

NSColorPanelColorDidChangeNotification

异常

异常的名字格式如下:

[前缀] + [名字的特有部分] + Exception

比如:

NSColorListIOException

NSColorListNotEditableException

NSDraggingException

NSFontUnavailableException

NSIllegalSelectorException