У меня есть приложение для iPad, которое я тестирую в Инструментах перед бета-тестированием. Я избавился от всех утечек памяти, кроме одной, и не могу найти по ней никакой информации. Я сбит с толку, что делать, поскольку мой код никогда не упоминает утечку объекта, который является экземпляром NSDecimalNumberPlaceHolder.
Наверняка я использую NSDecimalNumber. Я создаю 2 десятичных знака для каждой операции пользователя, и каждый раз, когда я запускаю цикл приложения (которое выполняет некоторую математическую операцию над двумя NSDecimalNumbers), я генерирую четыре экземпляра этой вещи NSDecimalPlaceHolder. Поскольку я не знаю, как он создается, я не знаю, как освободить или освободить его, чтобы не генерировать эти 16 утечек снова и снова.
Возможно ли, что на самом деле это не утечки?
Я запустил анализатор XCode, и он не сообщает о проблемах.
Я делаю следующее:
Я отправляю десятичное число с моего контроллера на мою модель (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>
}
Дайте мне знать, если это не ясно. Спасибо.