Category可以为已存在的类添加方法,包括系统类,原则不能添加属性,但添加不会报错,可是不能使用,要想用的话可以结合runtime使用
#import "Person.h"
@interface Person (Percate)
//分类中写了属性,用runtime机制实现setter、getter方法
@property(nonatomic,copy)NSString*str;
@end
.m文件中
#import "Person+Percate.h"
#import <objc/runtime.h>
static NSString *strKey=@"strKey"; //一个属性定义一个
@implementation Person (Percate)
-(void)setStr:(NSString *)str{
objc_setAssociatedObject(self, &strKey, str,OBJC_ASSOCIATION_COPY);
/*
strong修饰的类型用 OBJC_ASSOCIATION_RETAIN_NONATOMIC
copy 修饰的类型用 OBJC_ASSOCIATION_COPY
assin 修饰的类型用 OBJC_ASSOCIATION_ASSIGN
*/
}
-(NSString*)str{
return objc_getAssociatedObject(self, &strKey);
}
这样就可以正常使用了
有些为系统类添加的分类如:NSString、NSDate、UIImage、UILabel等不想在使用引入分类的头文件,那么可以把这些分类的头文件写在pch文件中