protocol
在protocol中使用property,只會生成setter和getter方法的聲明。
當使用的時候
- 使用systhsize name; 自動生成getter、setter
- 或者手動自己添加getter、setter和實例變量
category
和protocol不同的是,在category的時候已經不允許在類中在加入實例變量。(編譯的時候,對象的內容佈局已經確定)需要藉助函數objc_setAssociatedObject 和 objc_getAssociatedObject,在運行時添加屬性。
在runtime中,所有關聯對象都由AssociationsManager管理。AssociationsManager裏面是由一個靜態AssociationHashMap來存儲所有關聯對象。而map的key是這個對象的指針地址。