1 iphone xcode objective-c ios xcode4
我是初学者,建立一个计算器让自己熟悉ObjC.
到目前为止,我的代码运行正常,除了以下代码.
此功能链接到5个按钮.
问题是当我第一次按下任何按钮时,代码运行完美,第二次也是如此,但是第三次下降.它总是第三次失败.在第三次按下的屏幕上,按钮本身消失并编程停止,然后崩溃.
-(void) displayOnScreenValue{
[mainDisplay setText:onScreenTextValue];
}
-(void) pressOperatorButton:(id)sender{
UIButton *pressedOpp = (UIButton *)sender;
onScreenValue = [onScreenTextValue doubleValue]; //onScreenValue is Double
if (!opJustSet) {
switch (opSelected) {
case 0: //Equal
//mainDisplay.text = @"=";
accuValue = onScreenValue;
break;
case 1: //Plus
//mainDisplay.text = @"+";
accuValue = accuValue + onScreenValue;
break;
case 2: //Minus
//mainDisplay.text = @"-";
accuValue = accuValue - onScreenValue;
break;
case 3: //Multiply
//mainDisplay.text = @"x";
accuValue = accuValue * onScreenValue;
break;
case 4: //Divide
//mainDisplay.text = @"d";
accuValue = accuValue / onScreenValue;
break;
default:
break;
}
NSNumber* value = [NSNumber numberWithDouble:accuValue];
onScreenTextValue =[value stringValue];
[self displayOnScreenValue];
opJustSet = YES;
[value release];
}
signChangeSet = NO;
dotUsed = NO;
decimalValue = 0;
opSelected = pressedOpp.tag;
//[self displayOnScreenValue];
[pressedOpp release];
}
Run Code Online (Sandbox Code Playgroud)
在这段代码中:
NSNumber* value = [NSNumber numberWithDouble:accuValue];
onScreenTextValue =[value stringValue];
[self displayOnScreenValue];
opJustSet = YES;
[value release];
Run Code Online (Sandbox Code Playgroud)
你不应该释放价值.只有在调用alloc,复制方法或调用retain时才需要释放.大多数消息都会返回一个将自动释放的对象.
同样如此
[pressedOpp release];
Run Code Online (Sandbox Code Playgroud)
删除它 - 你没有分配pressedOpp(或保留它)
另外,我不知道onScreenTextValue是什么,但它应该是@property with(retain).如果是这样,您需要像这样访问:
self.onScreenTextValue = [value stringValue];
Run Code Online (Sandbox Code Playgroud)
要获得自动保留(在Objective-C中self.name和name不是一回事 - 第一个使用属性,第二个是对字段的原始访问,绕过生成的setter)
熟悉引用计数语义
http://www.loufranco.com/blog/files/managing-memory-iphone.html
- 或 - 升级到最新的Xcode并使用自动引用计数.
另一个简单的事情是始终运行"构建和分析"并确保解决每个问题.找到不正确的版本真的很擅长(事实上,同样的代码是自动引用计数的背后)
| 归档时间: |
|
| 查看次数: |
135 次 |
| 最近记录: |