我现在正面临着这样一个奇怪的问题,我正在尝试在我的项目中实现计算器演示。我想要实现的地方是ARC启用和我的项目ARC禁用一切都在该演示中完美运行它在我的项目中完美运行但当我尝试对浮点值进行操作时,我的应用程序崩溃说EXC_BAD_ACCESS(代码1 ... 。下面是我的代码
_currentValue和_previousValue在.h文件中是这样的
@property (retain,nonatomic) NSNumber* currentValue;
@property (retain,nonatomic) NSNumber* previousValue;
在我的.m文件中有两种方法,我面临问题
- (NSString *)calculateValueToString:(NSString *)valueString ForType:(enum State)type{
_currentValue = [numberFormatterFormal numberFromString:valueString];
NSLog(@"%@",_currentValue); //whatever number i input it get prints here
[self calculateValue]; // this method get called
state = type;
if (state != Equal){
_previousValue = _currentValue;
NSLog(@"%@",_previousValue); // get print
_currentValue = @0 ;
}
NSLog(@"_previousValue%@",_previousValue); // get print
NSLog(@"_currentValue%@",_currentValue); // get print
return [numberFormatterFormal stringFromNumber:_currentValue];
}
- (void)calculateValue{
switch (state) {
case Plus:
_currentValue = [NSNumber numberWithDouble:[_previousValue doubleValue] + [_currentValue doubleValue]];
break;
case Minus: //GET ONLY EXECUTE ONLY IF OPERATION IS -
NSLog(@"%@",_currentValue); // it has value
--->>>>>>> HERE APP CRASH NSLog(@"%@",_previousValue); // app crashes here
_currentValue = [NSNumber numberWithDouble:[_previousValue doubleValue] - [_currentValue doubleValue]];
NSLog(@"%@",_currentValue);
// THIS ALL WORK PERFECTLY IN THAT DEMO WHICH IS ARC ENABLE
break;
case Multiple:
_currentValue = [NSNumber numberWithDouble:[_previousValue doubleValue] * [_currentValue doubleValue]];
break;
case Divide:
_currentValue = [NSNumber numberWithDouble:[_previousValue doubleValue] / [_currentValue doubleValue]];
break;
default:
break;
}
}
答案 0 :(得分:1)
您正在直接访问实例变量,并使用手动引用计数。这不会起作用。
所有内存管理都在合成访问器方法中完成,因此必须使用属性访问器,例如:
self.currentValue = ....;
从不
_currentValue = ...;
或者您将绕过访问者为您执行的所有保留/释放调用。