1.原生category是不能添加属性的,如果需要添加的话可以使用运行时连接一个变量(是连接而不是添加).
2.例子 比方说给uilabel 添加一个nsstring属性 叫做defaultText,这样我们一个label 就有有两个text可用了,这里单纯为了说明给category连接属性,至于实用性大家自行开发。
.h文件中声明一个字符串变量
#import <UIKit/UIKit.h>
@interface UILabel (custom)
@property(nonatomic,strong)NSString* defaultText;
@end
.m文件中连接一个指针指向这个字符串并重写set和get方法
#import "UILabel+custom.h"
#import <objc/runtime.h>
static const void* defaultTextKey = &defaultTextKey;
@implementation UILabel (custom)
@dynamic defaultText;
//get方法
-(NSString*)defaultText
{
return objc_getAssociatedObject(self, defaultTextKey);
}
//set方法
-(void)setDefaultText:(NSString *)defaultText
{
objc_setAssociatedObject(self, defaultTextKey, defaultText, OBJC_ASSOCIATION_RETAIN);
// [self setText:defaultText];
}
@end
这样在使用uilabel的时候就有两个属性可用了
个人理解:static const void* defaultTextKey = &defaultTextKey; 在程序数据段声明一个指针;
objc_setAssociatedObject(self, defaultTextKey, defaultText, OBJC_ASSOCIATION_RETAIN); //set方法将声明的变量与程序段的指针连接起来
objc_getAssociatedObject(self, defaultTextKey);//get方法是从程序段取出指针并访问对象(内容)。