2015-12-21 42 views
0

使用類方法而不是實例方法有什麼優勢嗎? For Objective-c:使用類方法而不是實例方法有什麼優勢嗎?

class method: 
use symbol + (void) method; 
call: [Class method]; 


instance method: 
use symbol - (void) method; 
call: [class.obj method]; 
+3

(幾乎唯一的)優點是不必創建類的實例即可調用該方法。 – luk2302

+0

你可以查看http://stackoverflow.com/a/11174572/5362916 –

回答

0

我的解釋有點不同。

實例方法發送到一個類的INSTANCE。一個類的實例是一個具體的事情。它具有持續存在於對象生命中的狀態數據。向對象發送消息時,它可以使用該狀態數據來處理事件,並且可以記住以後的信息。

將類方法作爲一個整體發送給類。一個類是一個更抽象的概念。類至少在Objective C中保存狀態數據(在C++等其他語言中,有屬於整個類的類變量,但Objective C沒有類變量。)

讓我們來看一個例子一汽車廠

汽車廠是班。汽車類有一個類方法buildCar。 buildCar方法使用參數來告訴汽車應該是什麼顏色,引擎應該多大,應該有什麼選項等等。你給汽車工廠(類)發送了一個buildCar消息,並且它創建並返回了一個實例那個班級(汽車廠爲你建造一輛汽車並給你)

一旦你創建了一輛汽車,那輛汽車的狀態變量就存儲了收音機上的頻道,剩下的氣量在油箱中,里程錶上的微動(「千米」?),剎車上的磨損水平等。不同的汽車對於這些變量將具有不同的值。

你可以問一輛單獨的車輛裏面剩下多少氣體。 (實例方法)。車A可能有滿罐,而車B可能幾乎是空的。

但是,向汽車廠詢問油箱內有多少氣體是沒有意義的。一家汽車廠沒有油箱。但是,您可以向汽車製造廠詢問可以生產的汽車類型以及這些汽車的選項。那是汽車工廠始終適用的靜態信息。除了「工廠方法」(例如,構建一輛汽車)之外,還可以使用類方法,例如使用過程語言中的函數。類方法是獨立的。您將所有參數傳遞到所需的方法中,以執行所需的任何任務,並且返回單個結果(或者對於void類方法沒有結果)。一旦類方法執行完畢,就沒有狀態留下數據記錄發生了什麼。

-1

這不是一個好處。這就像是用錘子而不是鋸子有沒有什麼優勢。這個問題是無稽之談。你使用錘子錘擊和鋸鋸。

您可以使用實例方法處理與類的實例有關的事物。 您可以將類方法作爲一個整體與類相關。

相關問題