苹果已经制定了一套有关如何编写代码以最大程度地提高清晰度和与框架集成的准则。此外,Cocoa开发人员经常使用一些未记录的约定。
类名称:
类名始终大写。 Objective-C 没有名称空间,因此请在类名前加上缩写。这样可以避免“命名空间冲突”,在这种情况下,两段代码具有相同的名称,但执行不同的操作。由 Cocoa Dev Central 创建的类可能以“ CDC ”为前缀。 如果您将标准Cocoa类作为子类,则最好将前缀与超类名称结合使用,例如 CDCTableView 。 变量名称:变量名称以小写字母开头,但是在出现新单词的地方都使用大写字母:
NSString * streetAddress = @"1 Infinite Loop";
NSString * cityName = @"Cupertino";
NSString * countyName = @"Santa Clara";
---------
正确方法 ---------
NSString * hostName;
NSNumber * ipAddress;
NSArray * accounts;
---------
错误的方式 ---------
NSString * HST_NM; // all caps and too terse
NSNumber * theip; // a word or abbreviation?
NSMutableArray * nsma; // completely ambiguous
变量不能使用数字,空格,下划线以外的任何特殊字符开头。 苹果不建议使用下划线作为私有实例变量的前缀。
NSString * name // correct!
NSString * _name // _incorrect_
变量名称:指示类型在现实世界中,如果变量名称很常见,例如NSString,NSArray,NSNumber或BOOL,则变量名称通常不指示类型。 更正 NSString * accountName;
NSMutableArray * mailboxes;
NSArray * defaultHeaders;
BOOL userInputWasUpdated;
好,但不理想 NSString * accountNameString;
NSMutableArray * mailboxArray;
NSArray * defaultHeadersArray;
BOOL userInputWasUpdatedBOOL;
如果变量不是这些类型之一,则名称应反映出来。另外,某些类只需要一个实例。在这种情况下,只需根据类名命名变量。字体管理器就是一个很好的例子。 何时指示键入 NSImage * previewPaneImage; // self-explanatory
NSProgressIndicator * uploadIndicator; // shows progress for uploads
NSFontManager * fontManager; // only one of these, basic name ok
方法名称方法也许是我们可以谈论的最重要的主题。大多数面向对象的语言都使用语法。 虽然这些方法的名称很容易在第一时间编写,但实际行为尚不清楚。在大量的周围代码中,这更是一个问题。 Cocoa程序员从头开始思考,根据实际使用时的外观选择方法名称。假设我要编写一个写入磁盘的内存文件对象。 在Cocoa / Objective-C中,它看起来像这样:
[fileWrapper writeToFile: path atomically: YES updateFilenames: YES];
方法名称:访问者与许多其他语言相比,Objective-C不建议在简单访问器上使用“get”前缀。实例变量和方法可以具有相同的名称,因此可以使用它来发挥自己的优势: 正确! - (NSString *) name;
- (NSString *) color;
name = [object name];
color = [object color];
不正确的 - (NSString *) getName;
- (NSColor *) getColor;
name = [object getName];
color = [object getColor];
但是,当您通过内存地址间接返回值时,会使用“get”前缀:何时使用“获取”前缀
//将对象从NSArray复制到缓冲区
id *buffer = (id *) malloc(sizeof(id) * [array count]);
[array getObjects: buffer];
( Don't worry if you don't know what malloc does. )
The "set" prefix is always used on setters, though:
[object setName: name];
[object setColor: color];
形容词并非所有访问器都返回值,例如名称,日期,高度等。某些访问器表示对象的特殊质量。这些通常由 BOOLs 表示。 例如,“可选”。在Objective-C中,此键的吸气剂称为-isSelectable,但setter为-setSelectable:
BOOL selectable = [textView isSelectable];
BOOL editable = [textView isEditable];
[textView setSelectable: YES]; // no "is"
[textView setEditable: YES]; // no "is"
// if textview is editable.
if ([textView isEditable])
[textView setEditable: NO];
请记住,根据所有这些规则命名访问器并不是纯粹的清晰度和美观性问题。可可粉的大部分魔力都严重依赖 KVC ,而KVC依赖于正确命名的访问器。 我认为这会对您有所帮助。