NSDate变成NSNumber MYSTERY

use*_*669 5 nsdate ios

我在iOS 4.3和iOS 5中使用自动引用计数.我在我的界面中声明了一个NSDate对象:

NSDate *fingerprintsDate;
Run Code Online (Sandbox Code Playgroud)

后来,我设置了NSDate - 使用调试器并逐步执行它具有我期望的值:

fingerprintsDate = [NSDate date];
Run Code Online (Sandbox Code Playgroud)

最后,我试着从日期算起来:

if (fingerprintsDate == nil || [fingerprintsDate timeIntervalSinceNow] > 6)
Run Code Online (Sandbox Code Playgroud)

这就是它与无法识别的选择器崩溃的地方:"2012-01-18 23:07:46.662 Netapporter [473:707] - [NSCFNumber timeIntervalSinceNow]:无法识别的选择器发送到实例0x194490"

根据调试器,亲爱的NSDate读取:"fingerprintsDate =(NSCFNumber*)0x194490 139" - 当我打印描述时,它读取:"{value = +139.0000000000,type = kCFNumberFloat32Type}"

我没有在代码中的任何其他地方做任何其他任何指纹日期 - 但不知何故,它变成了一个NSNumer ......任何想法如何阻止它?

小智 0

[NSDate date] 返回一个非保留值(如果您使用 arc,则为弱值),因此它很可能在该赋值和调用 [fingerprintsDate timeIntervalSinceNow] 之间的某个位置被释放。当您将其分配给保留(强)属性时,它就会被保留。