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 来简化您的生活并避免奇怪的内存崩溃。
下面有
@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 来简化您的生活并避免奇怪的内存崩溃。