NSDecimalNumberPlaceHolder Leak - PullRequest
       3

NSDecimalNumberPlaceHolder Leak

1 голос
/ 03 октября 2011

У меня есть приложение для iPad, которое я тестирую в Instruments перед бета-тестированием. Я избавился от всех утечек памяти, кроме одной, и я не могу найти никакой информации об этом. Я озадачен тем, что делать, так как в моем коде никогда не упоминается утечка объекта, который является экземпляром NSDecimalNumberPlaceHolder.

Конечно, я использую NSDecimalNumber. Я создаю 2 десятичных знака на пользовательскую операцию, и каждый раз, когда я запускаю цикл приложения (который выполняет некоторую математическую операцию над двумя NSDecimalNumbers), я генерирую четыре экземпляра этой вещи NSDecimalPlaceHolder. Поскольку я не знаю, как он создается, я не знаю, как его освободить или освободить, чтобы не генерировать эти 16 утечек снова и снова.

Возможно ли, что это не настоящие утечки?

Я запустил 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];

где executeQueuedOperation:

-(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>
}

Дайте мне знать, если это не ясно. Спасибо.

1 Ответ

1 голос
/ 03 октября 2011

Попробуйте Heapshot в инструментах, см .: Когда утечка не утечка?

Если есть указатель на память, которая больше не используется, это не утечка, а потеря памяти. Я часто использую Heapshot, он действительно отлично работает. Также включите подсчет ссылок записи в инструменте Allocations и разверните детализацию. Вот скриншот: enter image description here

...