category是在程序加載運(yùn)行的時(shí)候,才加載到內(nèi)存中,此時(shí)各個(gè)類的內(nèi)存布局已經(jīng)確定了,不可以再更改。
可以加屬性,但是沒有對應(yīng)的成員變量存儲區(qū)域。類的成員變量存儲區(qū)在編譯時(shí)就確定了。所以只能定義成@dynamic,運(yùn)行時(shí)關(guān)聯(lián)一塊內(nèi)存到對象。
在runtime中存在一個(gè)類型為AssociationHashMap的哈希映射表保存著對象動態(tài)添加的屬性,每個(gè)對象以自身地址為key維護(hù)著一個(gè)綁定屬性表,我們動態(tài)添加的屬性就都存儲在這個(gè)表里,這也是動態(tài)添加property能成功的基礎(chǔ)。