【问题标题】:Cleanest way to associate a BOOL property to an entire NSArray将 BOOL 属性关联到整个 NSArray 的最简洁方法
【发布时间】:2012-09-22 15:19:28
【问题描述】:

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

什么是最干净/最合适的方法?

【问题讨论】:

  • 我还应该提到,我有一个数组 soundViews,它包含所有 soundView 数组对象。
  • 要么对其进行子类化并添加一个属性,(检查官方文档以了解要覆盖哪些方法)或使用第一个/最后一个对象作为此 BOOL 标志。

标签: objective-c nsarray kvc


【解决方案1】:

子类化NSArray 可能很困难,当您只需要一个额外的属性时,您可以通过类别和运行时函数获得另一个选项。在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】:

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

    【讨论】:

    • 感谢您的回答。这是一种方法。
    • 我没有投反对票,但子类化NSArray 可能有点工作,尤其是与其他选项相比。当你继承NSArray时,也许可以充实你的答案来描述还需要做什么。
    猜你喜欢
    • 2023-02-24
    • 1970-01-01
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    • 2013-02-11
    • 1970-01-01
    • 2013-08-10
    • 1970-01-01
    相关资源
    最近更新 更多