.h
@interface MyInfo : NSObject
@property(nonatomic,assign) int num;
@property(nonatomic,retain) NSString* text;
@end
@interface UIView(MyView)
@property(nonatomic,retain) MyInfo* info;
@end
.m
@implementation MyInfo
-(id)init
{
self = [super init];
self.text = @"";
self.num = 0;
return self;
}
- (id)copyWithZone:(nullable NSZone *)zone
{
MyInfo* info = [[[self class] allocWithZone: zone] init];
info.num = self.num;
info.text = [self.text copyWithZone:zone];
return info;
}
@end
@implementation UIView(MyView)
static void *infoKey = &infoKey;
-(void)setInfo:(MyInfo *)info
{
objc_setAssociatedObject(self, &infoKey, info, OBJC_ASSOCIATION_COPY);
}
-(MyInfo*)info
{
return objc_getAssociatedObject(self, &infoKey);
}
@end
testcode
MyInfo* info = [[MyInfo alloc] init];
UIView* view1 = [[UIView alloc] init];
info.num = 1;
info.text = @"view1";
view1.info = info;
info = [[MyInfo alloc] init];
UIView* view2 = [[UIView alloc] init];
info.num = 2;
info.text = @"view2";
view2.info = info;
NSLog(@"%d %@, %d %@",view1.info.num,view1.info.text,view2.info.num,view2.info.text);