代码之家  ›  专栏  ›  技术社区  ›  ChemDev

将BOOL属性关联到整个NSArray的最干净方法

  •  0
  • ChemDev  · 技术社区  · 12 年前

    我有几个NSArray,它们保存彼此关联的UIView对象的集合(NSArray是soundView0、soundView1、soundView 2和soundView3)。我希望能够将BOOL属性与整个数组相关联,从而启用/禁用数组中的UIViews。

    发表这篇文章最干净/最恰当的方式是什么?

    2 回复  |  直到 12 年前
        1
  •  6
  •   Carl Veazey    12 年前

    子类别化 NSArray 这可能很困难,当您只需要一个额外的属性时,您可以通过类别和运行时函数获得另一个选项。在上写一个类别 不可变数组 添加属性并使用关联的对象为属性提供存储。这段代码应该足够了,只需按照应用程序的命名约定进行重命名即可。

    @interface NSArray (MyExtensions)
    
    @property (nonatomic) BOOL myProperty
    
    @end
    
    @implementation NSArray (MyExtensions)
    
    static char MyPropertyKey;
    
    - (void)setMyProperty:(BOOL)myProperty
    {
        objc_setAssociatedObject(self, &MyPropertyKey, @(myProperty), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    }
    
    - (BOOL)myProperty
    {
        NSNumber *propertyNumber = objc_getAssociatedObject(self, &MyPropertyKey);
        return [propertyNumber boolValue];
    }
    
    @end
    
        2
  •  -1
  •   vignesh kumar    12 年前

    您可以编写自己的NSArray子类,然后可以将BOOL属性附加到该子类