默认情况下,因为分类底层结构的限制,不能田间成员变量到分类中。但可以通过关联对象来间接实现
关联对象提供了以下api
添加关联对象
void
objc_setAssociatedObject(id _Nonnull object, const void * _Nonnull key,
id _Nullable value, objc_AssociationPolicy policy)
获得关联对象
id _Nullable
objc_getAssociatedObject(id _Nonnull object, const void * _Nonnull key)
移除所有的关联对象
void
objc_removeAssociatedObjects(id _Nonnull object)
key的常见用法
static const void * MyKey = & MyKey;
objc_setAssociatedObject(obj, MyKey,
value,OBJC_ASSOCIATION_RETAIN_NONATOMIC)
objc_getAssociatedObject(obj, MyKey)
static const char MyKey;
objc_setAssociatedObject(obj,& MyKey,
value,OBJC_ASSOCIATION_RETAIN_NONATOMIC)
objc_getAssociatedObject(obj, &MyKey)
使用属性名作为key
objc_setAssociatedObject(obj,@"property",
value,OBJC_ASSOCIATION_RETAIN_NONATOMIC)
objc_getAssociatedObject(obj, @"property")
使用get方法的@selecot作为key
objc_setAssociatedObject(obj,@selector(getter),
value,OBJC_ASSOCIATION_RETAIN_NONATOMIC)
objc_getAssociatedObject(obj, @selector(getter))