2008-12-03 49 views
2

我注意到Apple的示例代碼,他們傾向於設計接收結構而不是多個參數的方法。這是爲什麼?就易用性而言,我個人比較喜歡後者,但就性能而言,是否有更好的選擇?方法:多個參數或結構?

[pencil drawPoint:Point3Make(20,40,60)] 
[pencil drawPointAtX:20 Y:50 Z:60] 

回答

5

不要混淆這個問題,關注性能。不要過早地進行優化(直到你知道你有問題),並且在考慮代碼中的性能熱點時,它幾乎總是在處理I/O(如數據庫,文件)的領域。因此,將消息傳遞風格與性能分開。您想首先做出最佳設計決策,然後僅在需要時纔會針對性能進行優化

就這麼說,Apple並不推薦或者更喜歡傳遞多個參數與結構/對象。在Objective-C範圍之外推廣這一點,在特定場景中有意義時使用個體參數或對象。換句話說,你可以遵循一個黑白的答案。相反,決定何時使用以下準則:

  • 傳遞對象/結構時是有意義的方法來了解對象的許多/所有成員時要在驗證一些規則
  • 傳遞對象/結構對象的各個成員之間的關係。這使您可以確保方法的使用者在調用方法之前構造一個有效的對象(從而不需要方法來驗證這些條件)。
  • 通行證個別參數,它是明確的方法是有道理的,只需要一定的元素,而不是整個對象

在你的例子使用的變化,塗料的方法,它有兩個座標(X和Y)將從拍攝點對象,而不是兩個變量X和Y

的方法retrieveOrderByIdAndName的最好辦法是採取單一的ID和名稱參數,而不是一些容器對象設計中獲益。

現在,如果有一些方法可以通過許多不同的標準檢索訂單,它會使更多的發送來創建retrieveOrderByCriteria並將其傳遞給一些標準結構。

1

如果圍繞它傳遞相同的參數集,將它們傳遞到結構中很有用,因爲它們在語義上屬於一起。

對於如3分的簡單結構,性能命中可能可以忽略不計。使用可讀/可重複使用的解決方案,然後分析您的代碼,如果你認爲它很慢:)

+0

所以你的意思是理論上,結構具有更好的性能? – 2008-12-03 01:27:12