我刚刚开始使用Objective-C进行编程。在此之前,我主要是C#人。
如果我以正确的方式释放以下代码中的内存,请告诉我。
@implementation CalculatorViewController
-(CalculatorBrain *) brain
{
if(!brain)
{
brain = [[CalculatorBrain alloc] init];
}
return brain;
}
-(IBAction) operationPressed: (UIButton *) sender
{
NSString *operation = sender.titleLabel.text;
if(userInMiddleOfTypingDigit)
{
[self brain].operand = display.text.doubleValue;
userInMiddleOfTypingDigit = NO;
}
double result = [[self brain] performOpeaation:operation];
[display setText:[NSString stringWithFormat:@"%g",result]];
}
- (void)dealloc
{
[brain release];
[super dealloc];
}
基本上我正在进行延迟初始化,如斯坦福大学教程所示。但不确定我是否正确释放内存。
如果出现问题,请纠正我。
谢谢,
答案 0 :(得分:2)
是的,看起来不错。就此而言,而不是:
[self brain].operand = display.text.doubleValue;
你也可以这样做:
self.brain.operand = display.text.doubleValue;
他们完全相同。有些人喜欢点语法,有些则不喜欢。但是,如果您已经在一个地方使用它,那么您也可以保持一致。
请注意,如果您计划由多个线程访问此类,那么您可能希望保护延迟初始化检查免受同步问题的影响。但我认为这超出了这个问题的范围。你的记忆管理很好。