objective-c - UIView 类别和属性

标签 objective-c

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

userData 在 .h 文件中被定义为一个 id 属性。

@implementation UIView (Extensions) 

@synthesize userData;

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

@end

当然,xCode 会提示我不能在类别中使用@synthesize。我怎样才能完成这个任务,或者 UIView 中已经有一些可以保存对象的属性。就像标签属性一样,但标签属性只包含整数。

最佳答案

正如您所说,您不能综合类别中的属性。为此,您必须使用称为关联对象的 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);
}

关于objective-c - UIView 类别和属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8493323/

相关文章:

ios - GooglePlus 不支持 IOS 4.3

ios - 如何在 Objective-C 中转换一个间接指针

带有 plist 返回的 iOS 7 arrayWithContentsOfFile 导致类型无效

iphone - fileExistsAtPath API 始终返回 NO

iOS 7 色调颜色去饱和度通知

java - C++/Java 绑定(bind) : In which side should multi-threading be implemented?

objective-c - 在 PreferencePane 中使用框架

objective-c - 如何在 Objective-C 中创建两个模型类的包装类

ios - 将 UIKit 的 UIScrollView 与 SpriteKit 结合使用

ios - 调试错误 xcode 6- 使用 google maps sdk