如何标记尚未设置非对象属性?

时间:2011-04-24 11:51:04

标签: objective-c properties

例如,我有这样的属性:

@property (nonatomic, assign) CGFloat startValue;
@property (nonatomic, assign) BOOL running;

它是一个类似于CSS的级联系统,如果它们没有明显改变,它们会继承值。但是,有一个描述整个州的课程。它必须拥有几乎所有东西的属性。只需修改一些属性,就可以在hirarchy中更改某些值以覆盖继承的值。这是一系列实例。

问题:使用此设计无法确定属性是否覆盖“主对象”中的值。

我需要一种安全的方法来标记属性是否已明确设置为某种东西。对于CGFloat,我可以说,如果值是< -99999它没有明确设置,我们只是使用主对象的值。但BOOL怎么样?

我也可以忘记属性并切换到词典。它们允许迭代键,因此我可以轻松地仅应用更改。但是他们在整个地方使用它们是一种痛苦。这就是为什么我想要一个简单的类,我可以设置属性。更容易使用,NSNumber对象中没有任何丑陋和沉重的值包装。

我确信有明智的方法可以做到这一点。

1 个答案:

答案 0 :(得分:2)

有几种方法可以实现这一目标:

  • 对于BOOL案例,您只需使用int代替并定义1等效于YES,0等效于NO-1相当于未设置。

  • 或者,您可以使用指向这些类型的指针。指针为NULL表示尚未设置值;指针与NULL不同,表示已设置一个值,并且该值在指针中存储的地址处可用。您必须以C方式管理内存(malloc(), free())。

  • 您可以将数字类型打包到NSNumber的实例中。与前一种情况类似,如果属性为nil,则尚未设置;否则,取消相应的值。