Coding Guidelines for Cocoa 是回答任何命名约定问题的绝佳资源。我的回答尽可能基于此。
初始化方法
init 方法看起来不错。
- (id) initWithName:(NSString *) name;
类方法
类方法看起来不错。
+ (NSString *) aliasForName:(NSString *) name
类方法也可用于实例化对象的实例。在这种情况下,Apple 的 API 的方法通常以类的名称开头,例如 UIButton 的 buttonWithType: 方法具有签名:
+ (id)buttonWithType:(UIButtonType)buttonType
实例方法
可以在General Rules 下找到有关方法编码约定的良好资源。
下面的方法应该去掉"and"s:
- (void) methodWithApple:(NSString *) apple andOrange:(NSString *) orange
andMango:(NSString *) mango // BAD
不要使用“and”来链接作为接收者属性的关键字。
- (int)runModalForDirectory:(NSString *)path file:(NSString *) name types:(NSArray *)fileTypes; 对
- (int)runModalForDirectory:(NSString *)path andFile:(NSString *)name andTypes:(NSArray *)fileTypes;错误
签名应该类似于以下内容:
- (void) methodWithApple:(NSString*)apple orange:(NSString*)orange
mango:(NSString*)mango // GOOD
最后,我认为可以对看似委托的方法进行一些改进:
- (void) statusWasChanged:(id)sender // Not horrible, but not ideal
第一个改进是在方法中添加类名。
通过识别正在发送的对象的类来开始名称
消息:
- (BOOL)tableView:(NSTableView *)tableView shouldSelectRow:(int)row;
- (BOOL)application:(NSApplication *)sender openFile:(NSString *)filename;
第二个改进是使用"DidChange"而不是"WasChanged"。
对被调用的方法使用“did”或“will”来通知
代表某事已经发生或即将发生。
- (void)browserDidScroll:(NSBrowser *)sender;
- (NSUndoManager *)windowWillReturnUndoManager:(NSWindow *)window;
第三个改进是强转换 sender 参数。我没有支持这一点的文档,但是示例中提供的所有示例都散发出这种行为。请注意上述代码示例中的 (NSBrowser*)sender 和 (NSWindow*)window 直接取自苹果文档。
考虑到这一点,委托方法应该看起来更像:
- (void) senderClassNameStatusDidChange:(SenderClassName*)sender // Good
如果发送者是一个 Person 对象,它看起来像:
- (void) personStatusDidChange:(Person*)sender // Good
请注意,您不应该总是在委托方法中使用“did”。
虽然您可以对调用的方法使用“did”或“will”
要求代表代表另一个对象做某事,“应该”
是首选。
- (BOOL)windowShouldClose:(id)sender;