使用场景:在分类中,不允许创建实例变量,这里就解决了此问题
参考: https://www.cnblogs.com/someonelikeyou/p/7162613.html
属性的实质:就是实例变量+set+get 方法
协议和分类中只会生成setter和getter的声明,如果要实现,还得借助runtime:
void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy); id objc_getAssociatedObject(id object, const void *key); void objc_removeAssociatedObjects(id object);
key:要保证全局唯一,key与关联的对象是一一对应关系。必须全局唯一。通常用@selector(methodName)作为key。 另外也可以用_cmd表示取当前方法 另外用自定义key也行 static const char Key; value:要关联的对象。 policy:关联策略。有五种关联策略。 OBJC_ASSOCIATION_ASSIGN 等价于 @property(assign)。 OBJC_ASSOCIATION_RETAIN_NONATOMIC等价于 @property(strong, nonatomic)。 OBJC_ASSOCIATION_COPY_NONATOMIC等价于@property(copy, nonatomic)。 OBJC_ASSOCIATION_RETAIN等价于@property(strong,atomic)。 OBJC_ASSOCIATION_COPY等价于@property(copy, atomic)。
不需要做任何释放对象的事