1

我有一个 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>
}

如果不清楚,请告诉我。谢谢。

4

1 回答 1

1

在 Instruments 中尝试 Heapshot,请参阅:Leak 何时不是 Leak?

如果仍然有指向不再使用的内存的指针,则不是泄漏,而是丢失了内存。我经常使用Heapshot,它真的很好用。还要在分配工具中打开记录引用计数并向下钻取。这是一个屏幕截图:在此处输入图像描述

于 2011-10-03T02:03:07.950 回答