2012-09-06 29 views
0

我正在寫一個班級文件,並且包含一個CGPoint作爲Ivar。這讓我想知道與較小的objective-c數據結構有關的開銷。內存足跡是否足夠明顯,足以證明指向它的指針,還是隻是指向2 CGfloat值?對於這個問題,如果我需要的只是x/y座標,爲什麼不把2個整數作爲ivars?objective-c小班開銷

與此相關的,是有微小的描述數據結構,像「小數據結構」,還是「小巫見大巫數據結構」命名法;一個描述由幾個基元組成的結構的詞。

+0

CGPoint是一個有兩個浮點的結構。我不明白你在講什麼指針。您永遠不需要使用指向CGPoint的指針,而是將其作爲參考傳遞給任何函數或方法。 – Gabriel

回答

2

小物體肯定存在問題,但據推測系統中已經有幾個小物體優化。

一般來說,如果您需要一個對象,請使用一個對象。如果不是,那麼不要。

但是,更大的問題是編寫代碼,以便人類易於閱讀並易於人工維護。使用性能工具(如儀器)隔離系統資源利用率需要解決的地方,然後只有解決這些問題。

當然,有明顯的愚蠢的事情要避免,但一般來說,重點放在一個乾淨的設計,並易於閱讀/更改實施。在測試套件上運行性能工具應該很容易發現任何錯誤。

+0

太棒了,很好地回答了我的問題。有關小數據結構命名的任何想法?如果注意力集中在一起,那麼我將把「小數據結構」這個短語作爲一個數據結構加以存儲,該數據結構包含4個或更少的基元,並且只有構造函數,解構器,設置器和獲取器作爲成員函數。 – user1444872

+0

「小物體」通常用於「小」(對於某些小的定義)物體。 C++中的一個由簡單類型組成的對象具有更爲正式的定義,並被稱爲POD(普通舊數據),但是該單元已經發展壯大併成爲標準。對於你所談論的物體,我只會使用「小物體」,大多數人應該知道你在說什麼。 –

0

首先不要擔心開銷,直到出現性能問題。

大多數(但不是全部)的面嚮對象語言製作小的,非對象,類型,以及較大的,基於對象的,那些之間有明顯的;但邊界是模糊的。決定如何表示某種類型的有用區別在於,您是否將其視爲簡單的,您可能認爲這可能是上運算的結果,使用計算;什麼的更復雜,這可能是一些具有固有行爲

運行內置的基本類型大多值:整數,字符等。在這種精神複數,分數座標等是簡單的值 - 使用結構;樹,堆棧,層次結構不是 - 使用對象。

在您的相關說明考慮許多用「價值」,你也可以考慮"composite"。 「小資」不是一個好選擇,錯誤的內涵;-)其他人可能會說「基本」,「微不足道」,「結構」或「記錄」 - 而後兩者也可以用於指他們經常使用的非常大的類型用於小型。