1

在 NSLocale 的标头中,currentLocale声明如下:

+ (id /* NSLocale * */)currentLocale;   // an object representing the user's current locale

很明显他们是id故意回来的,但我很好奇为什么有必要这样做。这个方法可以返回除了 NSLocale 实例之外的任何东西吗?

4

2 回答 2

4

过去,有人使用NSDictionary对象来获取语言环境信息。例如,请参阅记录的“特殊注意事项” -[NSString compare:options:range:locale:]

特别注意事项

在 OS X v10.5 之前,locale参数是NSDictionary. 在 OS X v10.5 及更高版本上,如果您传递NSDictionary当前语言环境的实例,则会改为使用。

一些方法,比如-[NSDate dateWithNaturalLanguageString:locale:]仍然取一个NSDictionary.

其他方法,例如 many classes' -descriptionWithLocale:,可以采用其中任何一种。

无论如何,随着NSLocale各种语言环境参数类型的引入,它被推广以id适应任何一种对象,而不会破坏源兼容性。的返回类型+[NSLocale currentLocale]是类似的泛型,因此它可以传递给过去只接受NSDictionary对象的方法。

于 2013-10-10T19:07:22.500 回答
2
于 2013-10-10T17:09:33.603 回答