将 NULL 分配给 NSDate* 是否安全?

Is it safe to assign NULL to an NSDate*?

我正在编写一个包含 Quest class 的游戏,其中有一个 completionDate 属性 类型 NSDate *,它记录了日期以及玩家完成任务的时间。它的声明(在 Quest.h 中)是:

@property (nonatomic) NSDate *completionDate;

我认为在玩家尚未完成任务的情况下,分配任务的 completionDate 属性 值 NULL 是合理的,以表明这一点.但是,当我这样做时:

quest.completionDate = NULL;

XCode (11.1) 对该行代码发出警告:Null passed to a callee that requires a non-null argument.

尽管有警告,但我的代码似乎按预期工作:进行如下检查以确定任务是否已完成似乎工作正常:

if (quest.completionDate == NULL) { ... }

对此进行研究,我发现了类似的问题,例如 , with answers suggesting just using the init method to initialize an object to a default state. However, in the case of NSDate, init 将日期初始化为 "now"(当前的 date/time),因此这对我正在尝试的内容不起作用做。

我的问题:是否有任何理由不将 NULL 分配给 NSDate *

将可为 null 的 属性 属性添加到您的 completionDate。

@property (nonatomic, nullable) NSDate *completionDate;

要了解有关声明可空类型的更多信息,请参阅此 Apple 博客 post Nullability and Objective-C