-1

我有下面。

@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。

知道出了什么问题吗?

4

1 回答 1

2

由于您没有使用 ARC,因此保留对象的最简单方法是使用生成的 setter/getter。

代替:

@interface MyViewController () {
    NSDate *myCurrentDate;
}

制作

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

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

但是,您将需要使用提供的 getter/setter:

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

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

于 2015-08-25T08:09:18.423 回答