Objective-C:改变自我内部的“自我”价值

时间:2010-12-29 00:47:19

标签: objective-c nsdate categories self

我在NSDate上有一个类别,我想实现一些函数来操作日期,例如:

NSDate *thedate = [NSDate date];
[thedate setToMidnight];

所以我在NSDate中有一个函数,如:

-(void)setToMidnight {
   some code with calendars and comps

   self = theNewDate;
}

这在函数内部起作用,但在该成员函数之外,日期没有改变。 我理解这个故障,因为我被告知self只是在成员函数内创建的局部变量。 那么,我该如何做到这一点呢?

当然,我本来可以写的:

thedate = [thedate dateAsMidnightDate]
or thedate = [NSDate dateAtMidnightFromDate:thedate]

但我觉得它在实例类中更有意义,因为我不想更改日期,只是调整以前创建的一些值。

1 个答案:

答案 0 :(得分:6)

你做不到。具体做法是:

  1. 函数或方法不能修改调用上下文中的局部变量。

  2. NSDate不可变(即创建后无法修改NSDate)。

  3. 因此,不能编写这样的方法。您可以获得的最接近的类是包装NSDate并将消息转发到该内部NSDate对象的类,当您希望使其代表新日期时,该对象会重新分配日期实例变量。