protocol
在protocol中使用property,只会生成setter和getter方法的声明。
当使用的时候
- 使用systhsize name; 自动生成getter、setter
- 或者手动自己添加getter、setter和实例变量
category
和protocol不同的是,在category的时候已经不允许在类中在加入实例变量。(编译的时候,对象的内容布局已经确定)需要借助函数objc_setAssociatedObject 和 objc_getAssociatedObject,在运行时添加属性。
在runtime中,所有关联对象都由AssociationsManager管理。AssociationsManager里面是由一个静态AssociationHashMap来存储所有关联对象。而map的key是这个对象的指针地址。