类别的主要作用是扩展功能,也就是添加新的方法,不能对属性进行封装。

如果要添加属性,可以使用关联对象辅助实现

#import "Test.h"

@interface Test (Other)
@property (nonatomic,strong)NSString *myStr;
@end

 

#import "Test+Other.h"
#import <objc/runtime.h>
@implementation Test (Other)
static const char *omyStr = "omyStr";


-(void)setMyStr:(NSString *)myStr{
     objc_setAssociatedObject(self, omyStr, myStr, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

-(NSString*)myStr{
    return objc_getAssociatedObject(self, omyStr);;
}
@end

 

需要注意的是设置方法中的内存管理语义:

关联类型 等效的@property属性
OBJC_ASSOCIATION_ASSIGN assign
OBJC_ASSOCIATION_RETAIN_NONATOMIC nonatomic, retain
OBJC_ASSOCIATION_COPY_NONATOMIC nonatomic, copy
OBJC_ASSOCIATION_RETAIN retain
OBJC_ASSOCIATION_COPY copy