gpt4 book ai didi

ios - 用户定义的运行时属性和关联对象

转载 作者:行者123 更新时间:2023-11-29 12:24:55 24 4
gpt4 key购买 nike

我目前正在尝试通过以下算法在 Xcode 6 中使用用户定义的运行时属性:

  1. 使用关联对象向 UIView 类添加自定义属性

    #define ASSOCIATED_OBJECT_GETTER_AND_SETTER(propertyType, propertyName, propertyNameWithCapital, associationType)   \
    -(void)set##propertyNameWithCapital:(propertyType)_value \
    { \
    objc_setAssociatedObject(self, @selector(propertyName), _value, associationType); \
    } \
    -(propertyType)propertyName \
    { \
    return objc_getAssociatedObject(self, @selector(propertyName)); \
    } \

    @interface eMyTags : NSObject
    @property (nonatomic) NSString* name;
    @end

    @implementation eMyTags
    @synthesize name;
    @end

    @interface UIView (MyTags)
    @property (nonatomic) eMyTags* myTags;
    @property (nonatomic) NSString* myName;
    @end

    @implementation UIView (MyTags)
    @dynamic myTags, myName;
    ASSOCIATED_OBJECT_GETTER_AND_SETTER(eMyTags*, myTags, MyTags, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    ASSOCIATED_OBJECT_GETTER_AND_SETTER(NSString*, myName, MyName, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    @end
  2. 通过 Xcode Storyboard设置这些属性的值 enter image description here

  3. 在运行时访问代码中的这些属性

    -(void)viewDidLoad
    {
    [super viewDidLoad];
    NSLog(@"myName: %@", view.myName);
    NSLog(@"myTags.name: %@", view.myTags.name);
    }

当我编译并运行时输出是:

myName: bla
myTags.name: (null)

那么为什么 myTags.name 没有设置?我错过了什么?我不能设置自定义类型的用户定义运行时属性吗?

最佳答案

好吧,myTags 没有分配到内存中,也没有被初始化。另一方面,@"bla"值是一个字符串文字,它实际上是 NSString 的一个实例,并指向内存中的一个位置。

关于ios - 用户定义的运行时属性和关联对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29475668/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com