UIView类别和属性

时间:2011-12-13 17:17:45

标签: objective-c

我正在尝试扩展UIView类以包含一个setUserData方法,该方法将保存对象值或任何值。这是宣言:

userData被定义为.h文件中的id属性。

@implementation UIView (Extensions) 

@synthesize userData;

-(void) setUserData:(id)value
{
    self.userData = value; 
}

@end

当然xCode抱怨我不能在类别中使用@synthesize。我怎样才能完成这个任务,或者UIView中已经存在一些可以容纳对象的属性。就像tag属性一样,tag属性只保存整数。

1 个答案:

答案 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);
}