开发者

NSDecimalNumberPlaceHolder Leak

开发者 https://www.devze.com 2023-04-09 21:05 出处:网络
I have an iPad app that I am testing in Instruments before beta testing. I have gotten rid of all memory leaks except one, and I can\'t find any information on it. I am baffled as to what to do, since

I have an iPad app that I am testing in Instruments before beta testing. I have gotten rid of all memory leaks except one, and I can't find any information on it. I am baffled as to what to do, since my code never mentions the leaking object which is an instance of NSDecimalNumberPlaceHolder.

For sure I am using NSDecimalNumber. I create 2 decimals per user operation and each I time I run a cycle of the app (which performs some math operation on the开发者_JS百科 two NSDecimalNumbers) I generate four instances of this NSDecimalPlaceHolder thing. Since I do not know how it gets created, I do not know how to release or dealloc it so as to not generate these 16 btye leaks over and over again.

Is it possible that these are not really leaks?

I have run the XCode Analyzer and it reports no issues.

What I'm doing is this:

I send a decimal number from my controller over to my model (analyzer_) which performs the operations and sends back the result.

[[self analyzer_] setOperand:[NSDecimalNumber decimalNumberWithString:anotherStringValue]];

The setOperand method looks like this:

-(void)setOperand:(NSDecimalNumber*)theOperand
{
NSLog(@"setOperand called");
operand_ = theOperand;
//[operand_ retain];    

}

Note that if I don't retain operand_ "somewhere" I get a BAD_ACCESS crash. I currently retain and release it later where the operand and the previously provided operand (queuedOperand_) are operated upon. For example:

{
[self performQueuedOperation];
queuedOperation_ = operation;
queuedOperand_ = operand_;
}   

return operand_;
[operand_ release];

where performQueuedOperation is:

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

Let me know if this is not clear. Thanks.


Try Heapshot in Instruments, see: When is a Leak not a Leak?

If there is still a pointer to the memory that is no longer used it is not a leak but it is lost memory. I use Heapshot often, it really works great. Also turn on recording reference counting in the Allocations tool and drill down. Here is a screenshot:

NSDecimalNumberPlaceHolder Leak

0

精彩评论

暂无评论...
验证码 换一张
取 消