返回自动释放NSString仍会导致内存泄漏

hoo*_*kjd 3 iphone memory-management autorelease

我有一个简单的函数,在解码后返回一个NSString.我在整个应用程序中经常使用它,并且每次使用它时都会产生内存泄漏(根据"泄漏"工具).泄漏告诉我问题是在我分配我要返回的NSString的行上,即使我自动释放它.这是功能:

-(NSString *) decodeValue
{
 NSString *newString;
 newString = [self stringByReplacingOccurrencesOfString:@"#" withString:@"$"];
 NSData *stateData = [NSData  dataWithBase64EncodedString:newString];
 NSString *convertState = [[[NSString alloc] initWithData:stateData encoding:NSUTF8StringEncoding] autorelease];
 return convertState;
}
Run Code Online (Sandbox Code Playgroud)

我对[autorelease]的理解是它应该以这种方式使用...我想要保持对象的长度足以在我的函数中返回它然后让对象稍后自动释放.所以我相信我可以通过这样的代码使用这个功能,而无需手动释放任何东西:

NSString *myDecodedString = [myString decodeValue];  
Run Code Online (Sandbox Code Playgroud)

但是这个过程报告泄漏,我不明白如何改变它以避免泄漏.我究竟做错了什么?

jex*_*exe 5

泄漏让你误入歧途.泄漏将告诉您泄漏的对象最初分配的位置,不一定与泄漏的原因相同.这段代码看起来很好 - 可能发生的是这个结果被保留在某个地方的另一个类中并且从未在那里发布过.