能否向編譯后得到的類中增加實例變量地技?能否向運行時創(chuàng)建的類中添加實例變量?
- 不能向編譯后得到的類中增加實例變量
- 能向運行時創(chuàng)建的類中添加實例變量
因為編譯后的類已經(jīng)注冊在
runtime
中秒拔,類結構體中的objc_ivar_list
(實例變量的鏈表)和instance_size
(實例變量的內(nèi)存大心!)已經(jīng)確定;同時runtime
會調(diào)用class_setvarlayout
和class_setWeaklvarLayout
來處理strong
砂缩、weak
引用作谚。所以不能向編譯后得到的類中添加實例變量。運行時創(chuàng)建的類是可以添加實例變量梯轻。調(diào)用
class_addIvar
函數(shù)食磕。但是得在調(diào)用objc_allocateClassPair
之后,在objc_registerClassPair
之前喳挑。其實就是在編譯的過程中向類中添加實例變量彬伦,編譯后類的實例鏈表、方法鏈表伊诵、變量大小已經(jīng)確定单绑。