Objective-C编码规范(二)

Objective-C 编码规范(二 命名)

目录


  • 2 命名

    对于易维护的代码而言,命名规则非常重要。Objective-C 的方法名往往十分长,但代码块读起来就像散文一样,不需要太多的代码注释。
    当编写纯粹的 Objective-C 代码时,我们基本遵守标准的 Objective-C naming rules,这些命名规则可能与 C++ 风格指南中的大相径庭。例如,Google 的 C++ 风格指南中推荐使用下划线分隔的单词作为变量名,而(苹果的)风格指南则使用驼峰命名法,这在 Objective-C 社区中非常普遍。
    任何的类、类别、方法以及变量的名字中都使用全大写的 首字母缩写。这遵守了苹果的标准命名方式,如 URL、TIFF 以及 EXIF。
    当编写 Objective-C++ 代码时,事情就不这么简单了。许多项目需要实现跨平台的 C++ API,并混合一些 Objective-C、Cocoa 代码,或者直接以 C++ 为后端,前端用本地 Cocoa 代码。这就导致了两种命名方式直接不统一。

    我们的解决方案是:编码风格取决于方法/函数以哪种语言实现。如果在一个 @implementation 语句中,就使用 Objective-C 的风格。如果实现一个 C++ 的类,就使用 C++ 的风格。这样避免了一个函数里面实例变量和局部变量命名规则混乱,严重影响可读性。

2 命名


2.1 文件名

【建议】文件名的命名应反映出其实现了什么类–包括大小写。遵循你所参与项目的约定。
文件的扩展名应该如下:

后缀文件类型说明
.hC/C++/Objective-C头文件
.mObjective-C实现文件
.mmOjbective-C++ 的实现文件
.cc纯C++实现文件
.c纯C实现文件

2.2 Objective-C++

【建议】源代码文件内,Ojbective-C++ 代码遵循你正在实现的函数/方法的风格。

 为了最小化 Cocoa/Objective-C 与 C++ 之间命名风格的冲突,根据待实现的函数/方法选择编码风格。实现 @implementation 语句块时,使用 Objective-C 的命名规则;如果实现一个 C++ 的类,就使用 C++ 命名规则。
// file: cross_platform_header.h 
 class CrossPlatformAPI {  
public:  
 ...   
int DoSomethingPlatformSpecific();  // impl on each platform  
private:  
 int an_instance_var_; 
};
// file: mac_implementation.mm 
#include "cross_platform_header.h"  
// A typical Objective-C class, using Objective-C naming. 

@interface MyDelegate : NSObject { 
 @private   int instanceVar_;   
CrossPlatformAPI* backEndObject_; 
} 
(void)respondToSomething:(id)something; 
@end 
@implementation MyDelegate 
- (void)respondToSomething:(id)something { 

  // bridge from Cocoa through our C++ backend  
instanceVar_ = backEndObject->DoSomethingPlatformSpecific();
 NSString* tempString = [NSString stringWithInt:instanceVar_]; 
 NSLog(@"%@", tempString); 

}
@end 

 // The platform-specific implementation of the C++ class, using 
// C++ naming.
int CrossPlatformAPI::DoSomethingPlatformSpecific() {  
 NSString* temp_string = [NSString stringWithInt:an_instance_var_];
 NSLog(@"%@", temp_string);   
return [temp_string intValue]; 
}

2.3 类名

【建议】类名(以及类别、协议名)应首字母大写,并以驼峰格式分割单词。

应用层 的代码,应该尽量避免不必要的前缀。为每个类都添加相同的前缀无助于可读性。当编写的代码期望在不同应用程序间复用时,应使用前缀(如:GTMSendMessage)。

2.4 类别名

【建议】类别名应该包含它所扩展的类的名字。同时还应该表明该类别的功能。推荐如下方式:” UILabel+FlickerNumber.h”

2.5 Objective-C方法名

【建议】方法名应该以小写字母开头,并混合驼峰格式。每个具名参数也应该以小写字母开头。

方法名应尽量读起来就像句子,这表示你应该选择与方法名连在一起读起来通顺的参数名。(例如,convertPoint:fromRect: 或 replaceCharactersInRange:withString:)。
访问器方法应该与他们 要获取的 成员变量的名字一样,但不应该以get作为前缀。
  • 以 get 、 set 开头的方法有特殊的意义,不要随意定义。
    set 是属性默认的设置方法,如果函数不是为了设置类成员,则不要用 set 开头,可用 setup 替代。
  • get 和属性方法无关,但在 Cocoa 中,其标准行为是通过引用传值,而不是直接返回结果的。欲获取变量,直接以变量名为名,如: userInfomation ,而不是 getUserInfomation 。
    例如:
- (id)getDelegate;  // AVOID 
- (id)delegate;     // GOOD
这仅限于 Objective-C 的方法名。C++ 的方法与函数的命名规则应该遵从 C++ 风格指南中的规则。

2.6 变量名

【建议】变量名应该以小写字母开头,并使用驼峰格式。类的成员变量应该以下划线作为后缀。

例如:myLocalVariable、myInstanceVariable_。如果不能使用 Objective-C 2.0 的 @property,使用 KVO/KVC 绑定的成员变量可以以一个下划线作为前缀。

2.6.1 普通变量名
对于静态的属性(int 或指针),不要使用匈牙利命名法。尽量为变量起一个描述性的名字。不要担心浪费列宽,因为让新的代码阅读者立即理解你的代码更重要。例如:
2.6.2 实例变量
实例变量应该混合大小写,并以下划线作为后缀,如 usernameTextField_。然而,如果不能使用 Objective-C 2.0(操作系统版本的限制),并且使用了 KVO/KVC 绑定成员变量时,我们允许例外。这种情况下,可以以一个下划线作为成员变量名字的前缀,这是苹果所接受的键/值命名惯例。如果可以使用 Objective-C 2.0,@property 以及 @synthesize 提供了遵从这一命名规则的解决方案。
2.6.3 常量
常量名(如宏定义、枚举、静态局部变量等)应该以小写字母 k 开头,使用驼峰格式分隔单词,如:kInvalidHandle,kWritePerm。

2.7 通知命名

【建议】基本命名格式是: [与通知相关的类名] + [Did | Will] + [UniquePartOfName] + Notification 例如:

NSApplicationDidBecomeActiveNotification
NSWindowDidMiniaturizeNotification
NSTextViewDidChangeSelectionNotification
NSColorPanelColorDidChangeNotification

2.8协议名

【建议】常用的 delegate、dateSource 做结尾外,还可以使用 …ing 这种形式,如:NSCoding、NSCopying、NSLocking

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值