新創建壹個命令行項目,創建ZJPerson類和ZJPerson(Study)分類
這樣分類就算間接完成添加屬性的功能,我們在main函數中使用壹下
可以看到分類添加的屬性使用效果和在類裏直接添加的屬性效果壹樣
我們打開源碼,搜索出objc_setAssociatedObject(, 找到這個方法的源碼
點擊進入_object_set_associative_reference方法
上面這段源碼怎麽理解呢
大概意思就是有AssociationsManager這麽壹個類,它的內部維護了壹個全局的字典AssociationsHashMap
AssociationsHashMap字典的key對應的是disguised(object),類似於當前對象的內存地址,而value存儲的是ObjectAssociationMap字典
ObjectAssociationMap字典的key對應的是添加的屬性的名字,value呢,則對應的是ObjcAssociation實例
ObjcAssociation實例則存儲著添加屬性的值和策略
結構如下圖所示
ZJPerson在study分類裏添加了壹個屬性bookName,在main函數中給person實例的bookName屬性賦值了@"How to study",那麽系統是怎麽存儲這個屬性的值呢?
其存儲結構如下
在例如,我們在main函數中創建兩個person對象
則其存儲結構如下
Category能否添加成員變量?如果可以,如何給Category添加成員變量?