类与实例方法Objective-C调用 - NSLocale方法

时间:2012-05-29 03:11:06

标签: method-call nslocale

我是一个非常绿色的nubie,无论如何,我正在通过一个教程来指导我使用NSLocale类获取本地货币,如下所示:

NSLocale *here = [NSLocale currentLocale];
NSString *currency = [here objectForKey:NSLocaleCountryCode];
NSLog(@"Money is %@", currency);

所以,我知道我正在创建一个名为'here'的NSLocale类的实例,然后我向'here'对象发送一条消息,询问objectForKey,并将结果返回给NSString,称为'currency' 。最后,我使用NSLog打印货币值。

好的,所以这是我的问题,然后我回顾了NSLocale类上的其他方法,我找到一个名为'preferredLanguages',它返回一个首选语言的数组。所以我虽然会调用那个方法,然后将它打印到日志中,只是为了笑容并帮助我学习。离开上面的例子,我想我会这样称呼它。从我上面的代码中已经有一个名为'here'的NSLocale类的实例开始,我认为我只需要以下内容(我正在重复上面的三行,所以这里很容易阅读。)

NSLocale *here = [NSLocale currentLocale];
NSString *currency = [here objectForKey:NSLocaleCountryCode];
NSLog(@"Money is %@", currency);

NSArray *prefLangs = [here preferredLanguages];
NSLog(@"Preferred Languages are: %@", prefLangs);

但是这没有用,我收到一条错误消息,上面写着“没有可见的@interface for'NSLocale'声明选择器'preferredLanguages'

我发现我必须这样做:

NSLocale *here = [NSLocale currentLocale];
NSString *currency = [here objectForKey:NSLocaleCountryCode];
NSLog(@"Money is %@", currency);

NSArray *prefLangs = [NSLocale preferredLanguages];
NSLog(@"Preferred Languages are: %@", prefLangs);

我只是不明白为什么我必须调用这样的方法:[NSLocale preferredLanguages],而不是[here preferredLanguages]。上面已经创建了'here'的实例。有人可以解释一下。

1 个答案:

答案 0 :(得分:1)

你会很快习惯于Objective C的快乐和痛苦,但简短的回答包括查看方法声明,如下所示:

+ preferredLanguages:

声明中的“+”表示它是一个类方法。

以下是Apple's "Learning Objective C" document

的相关段落
  

Objective-C中的类可以声明两种类型的方法:instance   方法和类方法。实例方法是一种方法   执行范围限定为类的特定实例。其他   单词,在调用实例方法之前,必须先创建一个   班级的实例。相比之下,类方法不需要   你要创建一个实例,但稍后会更多。

如果声明以“ - ”开头,则使其成为实例方法,并且您需要实例化(创建)实例才能调用该对象上的方法。

希望到目前为止这是有道理的。