2012-05-08 60 views
3

是否應該使用@property來訪問經常訪問的變量,例如粒子的位置? @property爲增加調用方法的開銷的變量創建getter和setter。在大多數情況下,這並不明顯,但如果該屬性每秒訪問次數高達一百萬次(在不同的情況下)呢?何時使用@property?

回答

4

您說的沒錯,Objective-C運行庫會爲@property訪問器添加一定數量的開銷。但是,這是在Objective-C類之間共享信息的可接受方式。如果您測量了應用程序並確定開銷實際上是處理瓶頸,那麼您應該只考慮一種不同的方法。

請記住,一個現代化的處理器在GHz的範圍內工作,而出事「每秒一百萬次」只在兆赫範圍。有可能,你的瓶頸將會在別的地方。

如果有問題,你總是可以做一個更大的Objective-C ParticleCloud類的內部簡單Particle結構的陣列上的顆粒加工。這將允許程序的其餘部分忽略Particle對象的確切實現,同時不需要訪問器@property

1

你真的在使用getter和setter嗎?如果沒有,請勿使用財產。如果是這樣,請使用它。要知道開銷是否顯着,唯一的方法是進行自己的性能測試並記錄流程前後的時間,運行完全相同的模擬並比較流逝的時間。如果這是一個性能問題,但可以忽略不計,請不要擔心。你甚至可能發現它比@property更快,而不是你使用的其他方法。

0

在我看來,你應該使用@property作爲你的對象的屬性。我知道這聽起來很愚蠢,但是通過屬性我的意思是可以被其他類訪問的「公共」屬性。如果只有你的課程需要這個屬性,那麼保持它在你的實現中是私人的,事情會更順暢和更清晰。

@property的好處之一是,你可以指定你是否希望它們是隻讀的(即沒有setter)。所以這是一個公共API的問題。

相關問題