使NSDate可变

时间:2014-03-06 08:23:43

标签: objective-c nsdate

有没有办法在不创建新的NSDate实例的情况下更改NSDate的值? 我想保持指针相同,只需替换基础数据。

首先想法是对NSDate进行子类化并添加一个保存NSDate值的属性......

3 个答案:

答案 0 :(得分:4)

我理解这个推理,但我认为可变子类的想法是危险的:

问题是框架不希望NSDate个实例发生变化。因此,如果NSString或符合NSMutableCopying的其他类别,他们不会将它们复制到原来的位置。

此外,NSDate可能只保留同一个实例并返回它,从而实现copy。您必须覆盖此行为,这又可能是意外的。

NSDate(类似于NSNumber)的想法是表示不可变的值。很难想象框架如何以及在何处依赖于这一事实。

答案 1 :(得分:2)

另一种方法是将NSDate包装到您自己的类中。您的类将具有指向内部NSDate对象的指针。然后,您可以更改此内部对象,但这样做会使您的包装器对象指针保持不变。

你必须实现从这个包装器获取和设置内部日期的方法,但这并不困难。

答案 2 :(得分:0)

如果您有一个NSMutableArray或类似的容器类,那么您可以添加NSNull对象,并在以后替换它们。然后应该可以序列化它。 NSNull对象是一个单例,因此在更换之前会减少内存消耗。干杯:)