只有运行时给分类添加属性,大部分都是这样的
- (NSString *)customName {
return objc_getAssociatedObject(self, &kExtendVarKey);
}
- (void)setCustomName:(NSString *)customName {
objc_setAssociatedObject(self, &kExtendVarKey,, customDelegate, OBJC_ASSOCIATION_RETAIN_COPY);
}
_cmd 是隐藏的参数,表示当前方法的selector,另外隐藏参数self表示当前方法调用的对象实例。
这个参数是唯一的参数,在一个文件中方法名不会重复。
所以可以让它代替运行时当中的属性的键名。
- (NSString *)customName {
return objc_getAssociatedObject(self, _cmd);
}
- (void)setCustomName:(NSString *)customName {
objc_setAssociatedObject(self, @selector(customName), customName, OBJC_ASSOCIATION_RETAIN_COPY);
}