У меня есть приложение для 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>
}
Дайте мне знать, если это не ясно. Спасибо.