NSDate 抛出 BAD_EXCESS 是为了什么?

NSDate throwing BAD_EXCESS for what?

下面有

@interface MyViewController () {
    NSDate *myCurrentDate;
}

@implementation MyViewController

-(void)viewDidLoad {
    [super viewDidLoad];
    myCurrentDate = [NSDate date];
}  


- (IBAction) prevAction:(id)sender {
    NSLog(@"myCurrentDate===%@", myCurrentDate); // here it says 
    myCurrentDate = [myCurrentDate dateByAddingTimeInterval:60*60*24*-1];
    [self formatDateAndPostOnButton];
}

当我尝试如下所示打印当前日期时,它崩溃并显示 BAD_EXCESS

NSLog(@"myCurrentDate===%@", myCurrentDate);

下面是相同的屏幕截图。

我没有在我的项目中使用 ARC。

知道出了什么问题吗?

由于您没有使用 ARC,保留对象的最简单方法是使用生成的 setters/getters.

而不是:

@interface MyViewController () {
    NSDate *myCurrentDate;
}

制作

@interface MyViewController ()
@property(nonatomic, retain) NSDate* myCurrentDate;
@end

所以它会保留 NSDate。现在,当自动释放池耗尽时,您的 NSDate 将被释放。

您将需要使用提供的 getters/setters,但是:

self.myCurrentDate = [self.myCurrentDate dateByAddingTimeInterval:60*60*24*-1];

无论如何,我建议开始使用 ARC 来简化您的生活并避免奇怪的内存崩溃。