我正在尝试扩展UIView类以包含一个setUserData方法,该方法将保存对象值或任何值。这是宣言:
userData被定义为.h文件中的id属性。
@implementation UIView (Extensions)
@synthesize userData;
-(void) setUserData:(id)value
{
self.userData = value;
}
@end
当然xCode抱怨我不能在类别中使用@synthesize。我怎样才能完成这个任务,或者UIView中已经存在一些可以容纳对象的属性。就像tag属性一样,tag属性只保存整数。
答案 0 :(得分:5)
如您所述,您无法合成某个类别中的属性。要实现这一点,您必须使用称为关联对象的Obj-C运行时功能。
#import <objc/runtime.h>
const char * const viewKey = "jweinberg.view.storage";
@implementation UIView (Storage)
- (id)myProperty;
{
return objc_getAssociatedObject(self, viewKey);
}
- (void)setMyProperty:(id)property;
{
objc_setAssociatedObject(self, viewKey, property, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}