例如,我有这样的属性:
@property (nonatomic, assign) CGFloat startValue;
@property (nonatomic, assign) BOOL running;
它是一个类似于CSS的级联系统,如果它们没有明显改变,它们会继承值。但是,有一个描述整个州的课程。它必须拥有几乎所有东西的属性。只需修改一些属性,就可以在hirarchy中更改某些值以覆盖继承的值。这是一系列实例。
问题:使用此设计无法确定属性是否覆盖“主对象”中的值。
我需要一种安全的方法来标记属性是否已明确设置为某种东西。对于CGFloat,我可以说,如果值是< -99999它没有明确设置,我们只是使用主对象的值。但BOOL怎么样?
我也可以忘记属性并切换到词典。它们允许迭代键,因此我可以轻松地仅应用更改。但是他们在整个地方使用它们是一种痛苦。这就是为什么我想要一个简单的类,我可以设置属性。更容易使用,NSNumber对象中没有任何丑陋和沉重的值包装。
我确信有明智的方法可以做到这一点。
答案 0 :(得分:2)
有几种方法可以实现这一目标:
对于BOOL
案例,您只需使用int
代替并定义1等效于YES
,0等效于NO
, -1
相当于未设置。
或者,您可以使用指向这些类型的指针。指针为NULL
表示尚未设置值;指针与NULL
不同,表示已设置一个值,并且该值在指针中存储的地址处可用。您必须以C方式管理内存(malloc(), free()
)。
您可以将数字类型打包到NSNumber
的实例中。与前一种情况类似,如果属性为nil
,则尚未设置;否则,取消相应的值。