2015-10-06 26 views

回答

3

不,編譯器不會將其優化爲僅實例變量訪問。它不能優化它,因爲類可能有一個覆蓋getter方法的子類。 (請注意,子類可以在運行時創建!)

但是,除非您已對代碼進行概要分析並確定它是瓶頸,否則不應該擔心消息發送開銷。

+0

要添加更多信息,請記住,合成屬性方法將包含KVO的代碼,如果該屬性被標記爲「atomic」,它也會爲其添加代碼。回到MRC時代,這些方法添加了用於正確內存管理的代碼。所以是的,與簡單訪問伊娃相比,開銷要多得多。但是,正如羅布所言,除非由於使用財產的方法而不是直接接受伊娃的行爲,否則不要擔心其中的任何問題。 – rmaddy

+0

[KVO在運行時添加setter覆蓋](https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/KeyValueObserving/Articles/KVOImplementation.html),而不是編譯時。另外,KVO不會重寫獲取者,而只會重寫setter。 [核心數據要求自定義getter調用'willAccessValueForKey:'和'didAccessValueForKey:'。](https://developer.apple.com/library/mac/documentation/Cocoa/Reference/CoreDataFramework/Classes/NSManagedObject_Class/#//apple_ref/OCC/instm/NSManagedObject/didAccessValueForKey :)。 –