2012-05-29 72 views
1

我是一個非常綠色nubie,反正,我是通過走我通過使用NSLocale類來獲得當地貨幣,這樣的教程工作:類與實例方法Obejctive-C調用 - NSLocale方法

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

所以,我明白,我創建一個名爲「這裏」的NSLocale類的實例,然後我送「這裏」對象一條消息,要求爲objectForKey,並將結果返回到的NSString,叫做「貨幣」 。最後,我用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); 

但沒有工作,我得到一個錯誤消息說,「‘NSLocale’不可見@interface聲明選擇‘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'的實例已經在上面創建。有人可以請解釋。

+0

雖然你的問題引用NSLocale作爲例子,但它確實是關於實例和類方法。你可能想考慮改變你的問題的標題,使其對其他可能訪問[所以]的人有用,同時遇到同樣的問題和問題。 –

回答

0

你會習慣於喜悅和目標C的疼痛相當快,但簡短的回答涉及到查找方法聲明,它看起來像:

+ preferredLanguages:

的「+」,在聲明表示它是一種類方法。

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

在Objective-C的類的相關段落可以聲明兩種類型的方法:實例 方法和類方法。實例方法是一種方法,其執行範圍是該類的特定實例。在其他 單詞中,在調用實例方法之前,必須先創建一個 類的實例。相比之下,類方法不需要你創建一個實例,但稍後會有更多。

如果聲明以「 - 」開頭,那麼它將成爲一個實例方法,並且您需要實例化一個實例(創建)以調用該對象上的方法。

希望這是有道理的。

+0

謝謝,在重新閱讀關於調用類和實例方法的那一節之後,我完全理解。 – jonathan3087