2013-04-10 12 views
0

我想將一些數據傳遞給我的對象,並有兩種選擇。與一個NSDictionary相比,三個屬性的內存效率

關於記憶 - 什麼更有效?聲明三個屬性還是使用initWithCapacity:3聲明一個NSDictionary

+0

如果你將BOOL保存在字典中,那麼這肯定是一種不好的方法。效率3屬性會更好。可讀。 – 2013-04-10 19:06:14

+0

我不會存儲基元,但我自己的對象。性能還是比較好的,對吧? – alexhajdu 2013-04-10 19:09:57

回答

2

聲明3個屬性將使用更少的內存,並且比使用NSMutableDictionary更具性能。

使用屬性還使您的代碼更易於閱讀,並允許您的編譯器爲您提供類型安全性方面的幫助。

另一個考慮因素是,您不能將nil存儲在集合中。

編輯:

至於內存方面,你提到的兩個選項之間的唯一區別是,NSDictionary需要堆中它自己的內存。對象本身仍然需要堆中的相同內存。

+2

你能否爲你的表現斷言提供一些證據? – 2013-04-10 19:08:44

+3

在屬性中,對象的內存地址存儲在後臺「ivar」中。在'NSDictionary'中,必須完成哈希表查找以獲取對象的地址。 – 2013-04-10 19:11:34

+0

有趣的是,感謝您的信息 – alexhajdu 2013-04-10 19:12:45

2

我會主張使用屬性,但不是因爲性能問題;僅僅因爲我認爲它更具可讀性且不易出錯 - 您可以通過使用鍵常量來使字典方法變得乾淨,但這是額外的工作。

對我來說,這裏的底線是,除非Instruments向您顯示您在這些物體上花費大量時間或內存,否則您應該走可讀性和清晰度的路徑。如果你削減幾個週期或幾個字節,這是非常不可能的。但即使這樣做,重構三個參數的對象初始化方法也不是一項巨大的工作。