开发工具:
文件大小: 632kb
下载次数: 0
上传时间: 2019-07-04
详细说明:这是从苹果官方的编程规范汉化而来的版本,由我自己手动整理,包括word版和pdf版,精致易读,欢迎下载学习!、代码命名基础
1通用原则
1.1清晰
尽量清晰又简洁,无法两仝时清晰更重要
Code
Commentary
nsertobject atIndex
Insert at
不清晰, insert什么?at表示什么?
removeObjectAtIndex
remove object:
√,因为参数指明了移除对象
remove
不清晰,要移除什么?
●通常不应缩写名称,即使方法名很长也应完整拼写
Code
Commentary
destination Selection
dessEl
不清晰
setBackgroundcolor:
setBkgdcolor
不清晰
你可能认为某个缩写众所周知,但其实未必,特别是你周围的开发者语言文化背景不同
有一些历史悠久的缩写还是可以使用的,详见第章
AP命名避免歧义,例如一个方法名有多种理解
Code
Commentary
sendPort
发送还是返回一个pot?
display name
显示一个名字还是返回U界面上的标题?
12一致
尽力保持 Cocoa编程接口命名一致。如果有疑惑,请浏览当前头文件或者参考文
档
当某个类的方法使用了多态时,一致性尤为重要。不同类里,功能相同的方法命名
也应相同
Code
Commentary
(NSInteger)tag
定义在 NSView, NSCell, NSControl
(void) setString value: NSString)定义在许多 Cocoa类里
1.3避免自引用( self reference)
命名不应自引用。这里的自引用指的是在词尾引用自身
Code
Commentary
NSString
NSStringObject白引用,所有 NSString都是对象,不用额外说明
●Mask与 Notification忽略此规则
Code
Commentary
NSUnderline By WordMask
NSTableview Column DidMove Notification
2前缀
前缀是编程接∏命名的重要部分,它们区分了软件的不同功能区域。前缀可以防止第三
方开发者与 Apple的命名冲突,同样可以防止Appe内部的命名冲突
●前缀有指定格式,它由二到三个大写字母组成,不使用下划线和子前缀。下面是
些例子:
Prefix
Cocoa Framework
NS
Foundation
NS
Application Kit
AB
Address book
B
Interface Builder
●命名类、协议、函数、常量和 typedef结构体时使用前缀,方法名不使用前缀(囚
为它存在于特定类的命名空间中),结构体字段不使用前缀
3书写约定
●在命名AP元素时,使用驼峰命名法(如 run the words。 gether),并注意以下
书写约定:
方法名:小写第一个字母,大写之后所有单词的首字母,不使用前缀(如
fileExistsAtPath: isDirectory:).如果方法名以一个众所周知的大写缩略词开
始,该规则不适用,如 TIFF Representation( SMage)。
函数及常量名,使用与其关联类相同的前缀,并大写首字母.例如
NSRun AlertPanel、 NSCellDisab|ed。
避免使用下划线作为私有方法的前缀,Appe保留这一方式的使用,强行使用可能
会导致命名冲突,即 Apple已有的方法被覆盖,这会导致灾难性后果
4Cass与 Protocol命名
class的名称应该包含一个名词,用以表明这个类是什么(或者做了什么),并拥有合
适的前缀,如 NSString、 NSDate、 NSScannen、U| Application、U| Button
Protocols应当根据它们对行为分组的方式进行命名:
不关联 class的 protoco:大多数 protocol聚集了一堆相关方法,并不关联cass,
这种 protocol使用ing形式以和 class区分开来
Code
Commentar
NSLocking
NSLoCk
不好,看起来像是一个cass
●关联cass的 Protocol:一些 Protocol聚集了一堆无关方法,并试图与某个 class
关联在起,由这个cass米主导,这种 Protocol与 class同名,如 NSObject的
协议就叫 NSObject。
5.头文件
头文件的命名极其重要,因为它可以指出头文件包含的内容
声明一个孤立的cass或 protocol.请将声明放入单独的文件中,使头文件名与声
明的cass/ protocol相同。
Header file
Declares
NSLocale h
包含 NSLocale class
●声明关联的cass或 protocol。请将关联的声明( class/category/ protocol放人
同一个头文件,头文件名与主要的 class/category/ protoco相同
Header file Declares
NSString. h包含 NSString和 NSMutableString classes
NSLock h包含 NSLocking protocol和 NSLock, NSCondition Lock,
NSRecursiveLock classes
Framework头文件。每个 framework都应该有一个同名头文件,包含了框架内所
有公共头文件。
Header file
Framework
Foundation h
Foundation framework
●添加AP|到力一个 framework。如果要在一个 framework中为另一个 framework
的 class的 category添加方法,加上单词“ Additions”,如 Application Kit的
NSBundleadditions h文件。
●关联的函数、数据类型.如果你有一组关联的函数、常量、结构体或其他数据类型,
将它们放到一个名字合适的头文件中,如 Application Kit的 NSGraphics h。
二、方法
1通用原则
以小写字母开始,之后单词的首字母大写。以众所周知的缩写开始可以大写,如
TFF、PDF,私有方法可以加前缀。
如果方法代表对象接收的动作,以动词丌始。如-(void) invokeWith T arget:(d
target; FH -(void)selectTabViewltem: (NSTabViewltem*)tab Viewltem. MS
要使用do或does作为名字的一部分,因为助动词在这里很少有实际意义,同
样的,也别在动词之前使用副词和形容词
●如果方法返回接收者的属性,以接收者十接收的属性命名。除非间接返回多个值,
否则不要使用get单词(为了与 accessor methods区分)
method
Commentary
(NSSize)cellSize
(NSSizecalc CellSize
(NSSizegetCellSize,
●在所有参数之前使用关键字
method
Commentary
(void)sendAction: (SEL)aSelector toObject: (id)anobject
forAllcells: BOOL)flag
(void)sendAction: (SEL)a Selector: (id)anObject: (BOOL)flag: x
●确保参数之前的关键字充分描述了参数
method
Commentary
(id)view WithTag: (NSInteger)aTag
(id)taggedview: (int)aT ag
创建白定义iit方法时,记得指明关联的儿素
method
Commentary
(id)initWith Frame: (CG Rect)frameRect
(id)initWith Frame ( NSRect)frame Rect mode (int)aMode
cellClass: (Class)factoryld
numberOfRows: introwsHigh
numberofColumns: ( intcolsWide
●不要使用and来连接作为接收者属性的关键字
method
Commentary
(int)run ModalForDirectory: (NSString ")path file: (NSString V
gname types: NSArray )fileTypes
(intrunModalForDirectory: (NSString
)path x
andFile: NSString name andTypes: NSArray *)fileTypes
虽然在这个例子使用and看似不错,但是一旦参数非常多时就容易出现问题。
除非方法描述了两个独立的操作,才使用and来连接它们
method
Commentary
( BOOL)open File: (NSString
unIPath√
with Application: (NSString
JappName
andDeactivate: BOOL)flag
2 getter和 setter方法( Accessor methods)
如果 property表示为名词,格式如下
(type)noun
(voidsetNoun: (type)aNoun;
例如:
(NSString title:
(void setTitle: (NSString ")aTitle
如果 property表示为形容词,格式如下
(BOOL)isAdjective
(void)setAdjective (BOOL) flag
例如:
BoO凵 )edItable;
(void set Editable BOOL)flag
如果 property表示为动词,格式如下(动词用一般现在时):
(BOOLverbobject
(void)setVerbobject: (BOOL)flag
例如:
BOOLShowsAlpha
(void setShowsAlpha: BOOL)flag
不要把动词的过去分词形式当作形容词使用
meto
d
Commentary
(void) setAcceptsGlyphInfo: (BOOL)flag
(BOOLacceptsGlyphInfo
(void)setGlyphInfoAccepted: ( BOOLflag
BOOLyglyphInfoAccepted
你可能使用情态动词(can、 should、w等)来增加可读性,不过不要使用do
或does
method
Commentary
(void)setCanHide BOOL)flag
BOOLcanHide
(void setshouldclose Document: (BOOL)flag
(BOOLshouldCloseDocument;
(void)setDoesAcceptGlyphInfo: BOOL)flag
( BOOLdoseAcceptGlyphInto
●只有方法需要间接返回多个值的情况下才使用get
(void)getLine Dash: (float " )pattern count: (int *)count NSBezierPath
phase: float *)phase
像这种接收多个参数的方法应该能够传人NULL,因为调用者未必对每个参数都感兴
趣
3 Delegate方法
以发送消息的对象开始
(BOOL)table View (NSTableView ")table View shouldSelectRow: (int)row
( BOOLapplication: (NSApplication )sender open File: (NSString )filename
上面的例子省咯了前缀的类名和首字丹小写。
●以发送消息的对象开始的规则不适用下列两种情况
■只有一个 sender参数的方法
(BOOL)applicationOpenUntitledFile: NSApplication *)sender;
■响应 notification的方法(方法的唯一参数就是 notification)
(void)window Did Change Screen: ( NSNotification )notification
●使用单词dd和wil来通知 delegate,did表示某些事已发生,wi表示某些事
将要发生
(void)browser DidScroll: (NSBrowser*sender
(NSUndoManager *)window Will ReturnUndo Manager: ( NSWindow *)window;
询问 delegate是否可以执行某个行为时可以使用did或wil,不过 should更完
美
BOOL)Window Should Close: (id) sender
4集合方法
为了管理集合中的元素,集合应该有这几个方法:
(Void)addElement: (element Type)anObj
(voidremoveElement: (element Type)anobj
(NSArray )elements
例如:
(void)addLayoutManager (NSLayoutManager )obj
(voidremoveLayoutManager: NSLayoutManager obj
(NSArray )layoutManagers
如果集合是无序的,返回一个 NSSet比 NSarray更好
如果需要在集合中的特定位置插入元素,使用类似下面的方法:
(void)insertLayoutManager: (NSLayoutManager )obj atIndex (int index;
(voidremove LayoutManager AtIndex: (int index;
其他集合方法小例
(void)add ChildWindow: (NSWindow )childWin ordered: (NSWindow Mode)
place
(voidremove ChildWindow: (NSWindow )childWin
(NSArray )childwindows
(NSWindow *)parentWindow;
(void setParentWindow: NSWindow )window;
5方法参数
●参数名以小写字母开始,之后的单词首字母大写。如: removeobject: id)anobject
别使用" pointer”或"ptr”命名。参数类型里就已表明它是否是一个指针
●避免只有一到二个字母的参数名
●避免只有儿个宇母的缩写
一般来说,以下关键字和参数一是使用
action: (SEL)aSelector
alignment: ( intmode
atIndex: (int index
content: ( NSRectaRect
doubleValue: (double)aDouble
floatValue: floataFloat
font: (NSFont ")fontobj
frame: (NSRectframe Rect
intValue: (int)anEnt
key Equivalent: (NSString )charCode
length: (intnum Bytes
point: (NSPoint)aPoint
string Value: (NSString *)aString
tag: (int aiNt
target: (id)anobject
title: (NSString )aString
6私有方法
不要使用下划线作为私有方法的前缀,Appe保留这一使用方式.因为若是你的私
有方法名已被 Apple使用,覆盖它将会产生极难追踪的BUG。
如果继承自大型 Cocoa框架(如Uew),请确保子类的私有方法名与父类不一
样。可以为私有方法加一个前缀,如公司名或项目名:XX。例如你的项目叫做
Byte Flogger,那么前缀可能是: BF- addobject,
总之,为子类的私有方法添加前缀是为了不覆盖其父类的私有方法
三、函数
●函数的命名类似方法,但有两点要注意
你使用的类和常量拥有相同的前缀。
前缀后的首字母人写
●许多函数名以描述其作用的动词开始。例如: NSHighlightRect和
NSDeallocateObject。
查询属性的函数有进一步的命名规则:
●如果函数返回首个参数的属性,省略动词。
unsigned int NSEventMask FromType(NSEventType type
float NSHeight(NSRect aRect
●如果通过 reference返回了值,使用“Get
const char *NS GetsizeAndAlignment(const char typePtr, unsigned int sizep, unsig
ned int *align
如果返回的是 boolean值,应该灵活使用动词
BOOL NSDecimallsNotANumber(const NSDecimal*decimal
8
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.