2014-01-25 62 views
0

我正在學習Objective C的過程。有些語法不同;我不明白爲什麼他們不得不重新發明事物,爲他們提供幫助。Objective C - 類方法,實例方法

我想我有這個直。實例方法是您必須創建類的實例才能使用方法的方法。以負號進行。類方法是您不必創建類實例的方法。由加號加上。

那麼編寫一個你不打算用你可以使用的方法實例化的類是合適的嗎?有點像你的程序的一般工具組?只要我遵守MVC方法。

+2

有趣的事實; Java以及其中的所有派生都直接受Objective-C的啓發,相當直接地提升了許多設計模式。 – bbum

+0

如果你要創建一個只包含類方法但沒有實例方法的類(因此不應該實例化),我建議標記'alloc','init'和'initWithZone:'方法'__attribute __((不可用(「這個類不能被實例化)));' – nhgrif

+1

語法是不同的,因爲與C++不同,*所有*有效的C代碼也是有效的Objective-C,並且相同的代碼也是相同的Objective-C和C一樣。爲了使其成爲可能,語法增加 - 類聲明,方法聲明,方法調用等 - 必須以某種方式進行限定,以免它們與現有的C語法衝突。因此所有的@,+ s,-s,[] s等等 相比之下,C++在很多方面與C完全不同,儘管名稱和表面上相似的語法。 「類C語法」並不意味着「類C語言」。 – user2310967

回答

8

我正在學習Objective C的過程。有些相當不同的語法 ;我不明白爲什麼他們不得不重新發明事物,爲他們提供幫助。

請記住,Objective-C最初創建於1983年,與C++同一年。所以,這不是一個真正的重塑,至少是你可能習慣的語言。事實上,它可能早於許多上述語言。 Objective-C很受Smalltalk的啓發,但我認爲你會發現Smalltalk的語法更加陌生!

實例方法是您必須創建一個 類的實例才能使用這些方法的方法。以負號進行。一個類的方法是 其中你不必創建一個類實例。加號 。

是的,你基本上是那樣直。類聲明/定義以'+'開頭的類方法可以在類本身而不是類的實例上調用。在Objective-C中,類本身就是對象。類方法不能訪問實例變量(因爲它們不在實例上調用),但除此之外,它們是常規方法。實例方法只能在類的實例化實例上調用,並且可以訪問該實例的內部狀態(即它的實例變量)。

那麼編寫一個你不打算使用的方法是否合適 用你可以使用的方法實例化?

當然,這不是不合理的。不管這是一個好主意還是另一個問題。我認爲很多時候使用常規函數而不是類方法更適合這類事情。類方法是通常用於方便的方法(如工廠方法),配置該類的所有實例的全局/默認行爲,以及那種事情。