在 NSLocale 的标头中,currentLocale声明如下:
+ (id /* NSLocale * */)currentLocale; // an object representing the user's current locale
很明显他们是id故意回来的,但我很好奇为什么有必要这样做。这个方法可以返回除了 NSLocale 实例之外的任何东西吗?
在 NSLocale 的标头中,currentLocale声明如下:
+ (id /* NSLocale * */)currentLocale; // an object representing the user's current locale
很明显他们是id故意回来的,但我很好奇为什么有必要这样做。这个方法可以返回除了 NSLocale 实例之外的任何东西吗?
过去,有人使用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对象的方法。