Objective c 委托方法的正确命名约定,除了委托对象外,没有任何参数?
我有一个名为Objective c 委托方法的正确命名约定,除了委托对象外,没有任何参数?,objective-c,cocoa,naming-conventions,Objective C,Cocoa,Naming Conventions,我有一个名为ABCCalendarView的类。它需要一个NSCalendar,并从其委托获取此对象。我正试图找出这个委托方法的名称,并且我想适应Cocoa框架的最佳实践 根据我的看法,我应该: 通过标识发送消息的对象的类来启动名称: - (BOOL)tableView:(NSTableView *)tableView shouldSelectRow:(int)row; - (BOOL)application:(NSApplication *)sender openFile:(NSString
ABCCalendarView
的类。它需要一个NSCalendar
,并从其委托获取此对象。我正试图找出这个委托方法的名称,并且我想适应Cocoa框架的最佳实践
根据我的看法,我应该:
- 通过标识发送消息的对象的类来启动名称:
类名省略前缀,第一个字母为小写- (BOOL)tableView:(NSTableView *)tableView shouldSelectRow:(int)row; - (BOOL)application:(NSApplication *)sender openFile:(NSString *)filename;
- 除非该方法只有一个参数发送者,否则类名称后面会附加冒号(该参数是对委托对象的引用)
- (BOOL)applicationOpenUntitledFile:(NSApplication *)sender;
- (NSCalendar *)calendarViewUsesCalendar:(ABCCalendarView *)calendarView;
然而,在Cocoa框架中查看这种情况的实际示例,我可以看到,在这种情况下,使用的实际约定似乎更倾向于将类名放在方法名的末尾。例如:
// UITableViewDataSource has the method:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
// UITableViewDelegate has:
- (NSIndexPath *)indexPathForPreferredFocusedViewInTableView:(UITableView *)tableView
// UIScrollView has:
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
如果我遵循此约定,则建议我调用我的方法:
- (NSCalendar *)calendarForCalendarView:(ABCCalendarView *)calendarView;
为什么苹果的指导方针和他们的实际行动之间似乎存在差异?当创建委托方法时,基本上只是设置调用对象的属性,那么应该遵循什么约定呢?我认为这在内部有点不一致。有两条“一般规则”规定:
如果该方法返回接收方的属性,请命名该方法
在属性之后
及
让论点前的单词描述论点
这些以及SDK名称中的先例都支持您的第二个公式:
- (NSCalendar *)calendarForCalendarView:(ABCCalendarView *)calendarView;
我认为SDK名称中有充分的证据表明,您在委托部分找到的规则应该重述。正如你所指出的,它说
通过标识发送消息的对象的类来启动名称
但在我看来,它应该说:“发送调用方的实例作为第一个参数”。这是一种半命名规则,半设计模式。这样,返回代理名称的单参数属性可以是
returnTypeSenderType:
(实际上就是这样)的形式,而不会与文档的其他部分发生冲突。您的“before”和“after”建议的方法签名是不同的吗?现在,它们都是日历视图usescalendar:
。我可能会将该方法命名为-(NSCalendar)calendarForCalendarView:(ABCCalendarView*)aCalendarView代码>…+1@NSGod即使在一开始就有一个类名来检测委托方法可能也有好处,可读性也很重要。(而且For
远远优于Uses
)顺便说一句:多年来,我一直希望在这种情况下有方法名前缀。@nsgood yes!谢谢你的指点,我在问题中已经纠正了。我完全同意。如果你只是对最后一条规则稍加不同的解释,那么整个事情就很有意义了。按照你的建议,我将遵循命名惯例(苹果似乎在实践中使用的命名惯例)。谢谢