category 动态增加属性
起因
抽风查看以前的代码!!查看一个红点的库!查着查着就想补充一下分类里添加属性的方法!!重温runtime的一些使用! category里面的分类属性是不带 setter/getter ,而普通类里面是已经带 setter/getter;
动态添加属性
写法1
@property (nonatomic, assign) BOOL isNotIgnore;
//runtime 动态绑定 属性
- (BOOL)isNotIgnore{
//_cmd == @select(isIgnore); 和set方法里一致
return [objc_getAssociatedObject(self, _cmd) boolValue];
}
- (void)setIsNotIgnore:(BOOL)isNotIgnore{
// 注意BOOL类型 需要用OBJC_ASSOCIATION_RETAIN_NONATOMIC 不要用错,否则set方法会赋值出错
objc_setAssociatedObject(self, @selector(isNotIgnore), @(isNotIgnore), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
写法2
static char badgeMaximumBadgeNumberKey;
@property (nonatomic, assign) NSInteger badgeMaximumBadgeNumber;
//runtime 动态绑定 属性
- (NSInteger)badgeMaximumBadgeNumber {
id obj = objc_getAssociatedObject(self, &badgeMaximumBadgeNumberKey);
if(obj != nil && [obj isKindOfClass:[NSNumber class]])
{
return [obj integerValue];
}
else
return kWZLBadgeDefaultMaximumBadgeNumber;
}
- (void)setBadgeMaximumBadgeNumber:(NSInteger)badgeMaximumBadgeNumber {
NSNumber *numObj = @(badgeMaximumBadgeNumber);
objc_setAssociatedObject(self, &badgeMaximumBadgeNumberKey, numObj, OBJC_ASSOCIATION_RETAIN);
}