【发布时间】:2013-10-10 16:24:55
【问题描述】:
在 NSLocale 的标头中,currentLocale 声明如下:
+ (id /* NSLocale * */)currentLocale; // an object representing the user's current locale
很明显他们是故意返回id,但我很好奇为什么有必要这样做。这个方法可以返回除了 NSLocale 实例之外的任何东西吗?
【问题讨论】:
-
我怀疑 NSLocale 是一个弱定义的“类集群”,其中的组件类,如果被询问,不一定会声称是 NSLocale 的子类,即使它们都是这样响应的。跨度>
-
观察 initWithLocaleIdentifier: 是这样定义的
- (instancetype)initWithLocaleIdentifier:(NSString *)string -
那么他们为什么不使用
currentLocale的实例类型呢? -
这是个好问题。我看到
instancetype用于其他类,例如NSSet。您为什么不提出一个问题:id和instancetype之间有什么区别? -
如果 [SomeSubClassOfNSLocale currentLocale] 返回的实例不是 SubSubClassOfNSLocale 或其子类之一,那么 instancetype 将是不恰当且具有误导性的
标签: objective-c cocoa