方法和属性的名称相同

时间:2014-01-31 11:30:57

标签: objective-c cocoa properties

以下代码编译得很好 - 但它有什么问题吗?
我找不到任何会阻止我们对属性和方法名称使用相同标识符的Objective-C指南:

@interface MouseCursorHelper : NSObject

@property (nonatomic, readwrite, retain) NSCursor* rotateCursor;

+ (NSCursor*) rotateCursor;

@end

FWIW,该类被实现为在NSCursor之后建模的单例,以提供特定于应用的游标。

2 个答案:

答案 0 :(得分:5)

这可能有点令人困惑。

该属性为您生成2个实例方法:

- (NSCursor *)rotateCursor;
- (void)setRotateCursor:(NSCursor *)rotateCursor;

你还有一个方法:

+ (NSCursor *)rotateCursor;

从用户的角度来看,不清楚类方法的作用。文档会有所帮助。

答案 1 :(得分:2)

你在做什么完全没有问题。您所做的就是说类对象和类的实例都响应rotateCursor。这与响应intValue的NSString和响应intValue的NSNumber实例的实例在概念上并不完全不同。它们只是不同类型的对象。

事实上,你会发现Apple的几个实例在Cocoa框架中做同样的事情,例如。

[NSString class]; // Sending class to the class
[@"foo" class];   // Sending class to an instance of the class.