2012-09-04 26 views
0

重新編譯繼承類在閱讀的Objective-C運行指南,我碰到下面的語句來:傳統運行時和在改變伊娃佈局

在傳統運行時,如果你改變實例變量的佈局在一個類中,你必須重新編譯從它繼承的類。

在現代運行時中,如果更改類中實例變量的佈局,則不必重新編譯從其繼承的類。

有人可以提供一個例子嗎?

+0

您剛剛閱讀示例... – 2012-09-04 05:12:00

+1

您可能想要閱讀[\ [objc explain \]:非易碎ivars](http://www.sealiesoftware.com/blog/archive/2009/01/27 /objc_explain_Non-fragile_ivars.html)和[可可與愛的動態ivars:解決脆弱的基類問題](http://cocoawithlove.com/2010/03/dynamic-ivars-solving-fragile-base.html) –

回答

1

當然。如果Apple要發佈一個AppKit.framework,其中NSView包含一個新的實例變量,那麼每個包含子類(直接或間接)的第三方庫,框架或應用程序(NSView也包含該子類中的實例變量)將不得不重新編譯,否則應用程序將不再工作。

在現代運行時,這不再是真實的。 Apple可以通過附加的實例變量和而不是 break子程序發佈新的NSView實現。或者,正如格雷格帕克所說的,「這完全是關於不殺害小貓。」。