OC動態(tài)添加實例變量就要用到這個方法:
class_addIvar(Class_Nullablecls,constchar*_Nonnullname, size_t size, uint8_t alignment,constchar*_Nullabletypes)?
在蘋果的文檔里厕吉,已經(jīng)說得很詳細(xì)了胯府,不能向已存在的類添加實例變量物独。
而且要想使用這個方法,還必須在objc_allocateClassPair實現(xiàn)之后,和objc_registerClassPair實現(xiàn)之前使用荠医。
這兩個方法是構(gòu)建一個新類,和對新生成的類進(jìn)行注冊。
程序在編譯的時候思币,編譯器會生成實例變量的內(nèi)存布局ivar layout,告訴運(yùn)行時去哪里訪問類的實例變量羡微。一旦完成了類定義谷饿,就不能再添加成員變量了。編譯后的類拷淘,在程序啟動后各墨,就被runtime加載了,就沒有機(jī)會調(diào)用class_addIvar了启涯。
動態(tài)構(gòu)建的類需要調(diào)用objc_registerClassPair注冊后贬堵,才能被使用,也沒有機(jī)會再添加成員變量了结洼。