我有一个 iPad 应用程序,在进行 beta 测试之前,我正在 Instruments 中进行测试。我已经摆脱了除了一个之外的所有内存泄漏,我找不到任何关于它的信息。我不知道该怎么做,因为我的代码从未提到泄漏对象,它是 NSDecimalNumberPlaceHolder 的一个实例。
当然我使用的是 NSDecimalNumber。我为每个用户操作创建 2 个小数,每次我运行一个应用程序周期(它对两个 NSDecimalNumbers 执行一些数学运算)我生成这个 NSDecimalPlaceHolder 事物的四个实例。由于我不知道它是如何创建的,因此我不知道如何释放或释放它,以免一遍又一遍地产生这 16 个 btye 泄漏。
这些可能不是真正的泄漏吗?
我已经运行了 XCode Analyzer,它没有报告任何问题。
我正在做的是这样的:
我将一个十进制数从我的控制器发送到我的模型(analyzer_),它执行操作并发回结果。
[[self analyzer_] setOperand:[NSDecimalNumber decimalNumberWithString:anotherStringValue]];
setOperand 方法如下所示:
-(void)setOperand:(NSDecimalNumber*)theOperand
{
NSLog(@"setOperand called");
operand_ = theOperand;
//[operand_ retain];
}
请注意,如果我不保留操作数_“某处”,我会遇到 BAD_ACCESS 崩溃。我目前在操作数和之前提供的操作数(queuedOperand_)被操作的地方保留并释放它。例如:
{
[self performQueuedOperation];
queuedOperation_ = operation;
queuedOperand_ = operand_;
}
return operand_;
[operand_ release];
其中 performQueuedOperation 是:
-(void)performQueuedOperation
{
[operand_ retain];
if ([@"+" isEqualToString:queuedOperation_])
{
@try
{
operand_ = [queuedOperand_ decimalNumberByAdding:operand_];
}
@catch (NSException *NSDecimalNumberOverFlowException)
{
//viewController will send decimal point error message
}
<etc for the other operations>
}
如果不清楚,请告诉我。谢谢。